SF
python每日练习
python每日练习
注册登录
关注博客
注册登录
主页
关于
RSS
Python每日一练0032
python每日一练
2018-05-14
阅读 3 分钟
2k
TemporaryFile() 的第一个参数是文件模式,通常来讲文本模式使用 w+t ,二进制模式使用 w+b 。 这个模式同时支持读和写操作,在这里是很有用的,因为当你关闭文件去改变模式的时候,文件实际上已经不存在了。 TemporaryFile() 另外还支持跟内置的 open() 函数一样的参数。比如:
Python每日一练0031
python每日一练
2018-05-10
阅读 1 分钟
1.4k
问题 为什么'test'.count('')返回的是5? {代码...} 讨论 这是我在StackOverflow上发现的一个有趣的问题,这个问题可以简单的用一张图解释 {代码...} 因为最后一个字母最后(或者第一个字母之前)也包含了一个空的字符串,所以算出来是5个 但更有趣的是,''.count('')返回的是1 {代码...} 这就延伸出来两个哲学问题: Ho...
Python每日一练0030
python每日一练
2018-05-09
阅读 2 分钟
1.6k
问题 如何判断一个list包含另一个list 例如我有两个list {代码...} 如何判断list2包含了list1 解决方案 如果元素的数量不重要,也就是说只判断list1里的所有种类在list2都有出现过,那么使用set()即可 {代码...} 如果元素的数量也需要考虑,即list1里的元素必须全部在list2里出现并且不重复,那么可以考虑使用Counter {...
Python中鲜为人知的特性(一)
python每日一练
2018-05-02
阅读 2 分钟
1.7k
问题 Python中鲜为人知的特性(一) 讨论 函数参数unpack {代码...} 链式比较操作符 {代码...} 注意函数的默认参数 {代码...} 更安全的做法: {代码...} 带关键字的格式化 {代码...} for...else 语法 {代码...} dict 的特殊方法__missing__ 当查找不到 key 的时候,会执行这个方法。 {代码...} 切片操作的步长参数 {代码....
[译]yield关键字都做了什么?
python每日一练
2018-04-26
阅读 2 分钟
1.7k
原文:[链接]我的微信公众号:python每日一练 要理解什么是 yield,必须理解什么是生成器(generator)。在理解生成器之前,让我们先了解迭代。 迭代 当你建立了一个列表,你可以逐个地访问这个列表的元素,而这个访问的过程叫做迭代(iteration) {代码...} 代码中的mylist就是一个可迭代对象(iterable),当你使用列表生...
Python每日一练0025
python每日一练
2018-04-25
阅读 1 分钟
2.1k
问题 如何列举一个目录下的所有文件 解决方案 使用os.listdir() {代码...} 如果只需要文本文件的话,就结合os.path.isfile进行过滤 {代码...} 如果对文件有匹配需求的话,比如只需要某个目录的txt文件,那么可以使用glob模块,例如: {代码...} 讨论 os.listdir()会返回一个列表,包含目录下的所有文件,但不会包含.和.....
Python每日一练0024
python每日一练
2018-04-24
阅读 2 分钟
1.4k
问题 如何执行外部命令,如ls -l 解决方案 使用subprocess库 在Python 3.5之前,使用subprocess.call()函数 {代码...} 在Python3.5及之后,使用subprocess.run()函数 {代码...} 讨论 命令的执行默认不需要shell环境,所以当你使用ls -l作为参数时,需要将shell置位True,否则会报错误 {代码...} 通常来说对于执行系统命...
Python每日一练0023
python每日一练
2018-04-20
阅读 1 分钟
1.9k
问题 如何判断一个文件是否存在 解决方案 这个问题可以分成几类问题 如果这里的文件指的是文件或目录,我们可以用os.path.exists()方法 {代码...} 如果这里的文件指的是普通的文件,我们可以用os.path.isfile()方法 {代码...} 如果这里的文件指的是目录,我们可以用os.path.isdir()方法 {代码...} 并且在Python 3.4之后...
Python每日一练0022
python每日一练
2018-04-19
阅读 2 分钟
1.8k
问题 你想在一个文件里每次读入固定大小的字节,比如每次读入4个字节并转成int,或者每次读入x个字节并进行结构化,例如: {代码...} 解决方案 可以简单的用while循环来完成 {代码...} 输出为5 2 4 1 2 4 5 6 8 但更优雅的做法是结合使用iter和functools.partial {代码...} 输出同样是5 2 4 1 2 4 5 6 8 讨论 functools....
Python每日一练0021
python每日一练
2018-04-18
阅读 1 分钟
1.5k
问题 如何像操作文件一样操作str或bytes 类似于C++中的stringstream 解决方案 使用io模块中的StringIO和BytesIO 调用他们的构造函数得到一个io对象 {代码...} 然后就可以像文件一样进行read、write、seek等等操作 {代码...} 讨论 当需要模拟一个普通文件而且又不想真正的进行磁盘IO的时候(比如编写单元测试的时候),可...
Python每日一练0020
python每日一练
2018-04-16
阅读 2 分钟
2.8k
问题 你需要执行简单的日期操作,计算两个日期间隔多少天、某个日期后的多少天是几月几日、转换时间字符串的格式等 解决方案 使用datetime库中的datetime和timedelta类 其中datetime类代表一个日期 + 时间,例如2018年4月16日11点00分00秒;timedelta类代表一个日期间隔 对于datetime实例,可以直接进行-数学运算得到一...
Python每日一练0019
python每日一练
2018-04-14
阅读 1 分钟
2.2k
问题 Python中如何将int在十进制和二、八、十六进制之间互相转换 解决方案 十进制向二、八、十六进制转换 分别使用bin、oct、hex {代码...} 这样转换会有一个前缀0b、0o、0x,如果不想要前缀只想要数值的话,可以使用format {代码...} 二、八、十六进制向十进制转换 直接使用int()即可,因为int()的原型是int(x, base=10...
Python每日一练0018
python每日一练
2018-04-13
阅读 2 分钟
2.1k
问题 你需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现。 Python的float类型是存在误差的 {代码...} 解决方案 使用decimal模块,但要注意参数需要是字符串 然后其他操作(加法、比较等等)和内置的float类型一样即可 {代码...} 讨论 如果我们的计算对误差要求极高,例如涉及到金融领域的代码,那么可以...
Python每日一练0017
python每日一练
2018-04-12
阅读 2 分钟
1.6k
问题 你有一些长字符串,想以指定的列宽将它们重新格式化。 解决方案 使用textwrap模块的fill或wrap函数 假设有一个很长的字符串 {代码...} 如果直接输出的话,可读性会比较差 {代码...} 我们可以使用fill函数来将这个长字符串自动切分为若干短字符串,只需要指定width即可 {代码...} 也可以使用wrap函数,但是效果是一...
Python每日一练0016
python每日一练
2018-04-11
阅读 2 分钟
1.9k
strip() 方法能用于删除开始或结尾的字符。 lstrip() 和 rstrip() 分别从左和从右执行删除操作。 默认情况下,这些方法会去除空白字符,但是你也可以指定其他字符集合。
Python每日一练0015
python每日一练
2018-04-10
阅读 1 分钟
1.7k
问题 如何比较两个字面一样,但字节不一样的字符串 例如: {代码...} 这里的a和b字符串是一样的,但仔细观察可以发现,其中a字符串是\u7099,b字符串对应的是\uf9fb 所以虽然a和b是字面上一模一样的字符串,但a实际上和b是不等的 {代码...} 解决方案 使用unicodedata库的normalize将两个字符串标准化后,再进行比较就可...
Python每日一练0014
python每日一练
2018-04-09
阅读 1 分钟
2.4k
fnmatch(filename, pattern)对大小写的敏感依赖于系统,意思是在判断匹配之前,会对两个参数调用os.path.normcase(path),然后再进行匹配。关于os.path.normcase(path)见:[链接]
Python每日一练0013
python每日一练
2018-04-06
阅读 2 分钟
1.7k
问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在。 解决方案 使用collections库的ChainMap类,可以快速的将多个dict合并在一起 {代码...} 讨论 ChainMap可以将多个dict合并在一起,当做一个整体来处理,并且它比创建一个新的dict或者使用dict.u...
Python每日一练0012
python每日一练
2018-04-04
阅读 1 分钟
1.8k
问题 如何获取本机内网或外网IP? 解决方案 获取内网IP: {代码...} 获取外网IP: {代码...} 讨论 获取内网IP的原理很简单,就是构造一个UDP包,然后从头部(这里的IP的头部)拿到本机的IP 而获取外网的IP只能靠访问外部的网站拿到外网IP了,http://ip.cip.cc/就是一个这样的API 来源 SegmentFault 关注 欢迎关注我的微...
Python每日一练0011
python每日一练
2018-04-03
阅读 2 分钟
3.5k
问题 你有一段通过下标访问列表或者元组中元素的代码,但是这样有时候会使得你的代码难以阅读, 于是你想通过名称来访问元素。 解决方案 使用collections.namedtuple 函数,例如我们经常使用一个tuple表示一个坐标点的时候 {代码...} 讨论 collections.namedtuple 函数返回的是tuple类型的一个子类,能够支持原生tuple的...
Python每日一练0010
python每日一练
2018-04-02
阅读 3 分钟
2k
问题 你有一个字典或者实例的序列,然后你想根据某个特定的字段来分组迭代访问。 解决方案 使用itertools.groupby() 函数 假设有下列的字典列表: {代码...} 现在按照date字段来分组访问,就可以使用itertools.groupby()了 {代码...} 输出 {代码...} 讨论 itertools.groupby迭代器和一个可选的key参数,按key来分组的,...
Python每日一练0009
python每日一练
2018-03-29
阅读 2 分钟
1.5k
问题 怎样找出一个序列中出现次数最多的元素? 解决方案 使用collections库中的Counter对象可以方便的求出现次数最多的前N个元素 直接使用most_common成员函数就好了,例如: {代码...} 输出 {代码...} 讨论 Counter对象是dict的子类,事实上内部存储也是按照k-v字典存储的,这里的v就是次数,所以Counter对象支持dict对...
Python每日一练0008
python每日一练
2018-03-28
阅读 1 分钟
1.6k
问题 怎样在两个字典中寻寻找相同点(比如相同的键、相同的值等等)? 解决方案 直接对keys()或者items()使用集合操作,比如-(差)、|(并)、&(交) 考虑下面两个字典: {代码...} 要找到相同的key,可以对keys做&操作 {代码...} 也可以使用这一特性来对字典过滤,例如去掉集合A中key为x和y两个元素 {代码......
Python每日一练0007
python每日一练
2018-03-26
阅读 2 分钟
1.7k
问题 怎样实现一个键对应多个值的字典(也叫 multidict)? 例如: {代码...} 解决方案 使用collections模块中的defaultdict类 defaultdict的特点是,当key不存在时,会自动创建它,也就是说我们不用再像dict一样首先判断key是否存在了,下面是一个例子: {代码...} 当然,也可以用dict的setdefault函数来实现同样的效果...
Python每日一练0006
python每日一练
2018-03-25
阅读 2 分钟
1.8k
heapq.nlargest(n, iterable, key=None)heapq.nsmallest(n, iterable, key=None)
Python每日一练0005
python每日一练
2018-03-23
阅读 1 分钟
1.6k
list1 = [[0, 4, 1, 5], [3, 1, 5], [4, 0, 1, 5]]排序后为list1 = [[3, 1, 5], [0, 4, 1, 5], [4, 0, 1, 5]]
Python每日一练0004
python每日一练
2018-03-22
阅读 1 分钟
2.3k
问题 如何保存迭代对象的最后N个元素 例如保存列表['a', 'b', 'c', 'd']的最后2个元素 或者保存某个迭代器对象的最后5个元素 解决方案 对于列表、元组这样的数据结构,可以使用切片来很方便的实现,例如保存列表l的最后3个元素就可以直接l[-3:] 但有些时候,我们操作的可迭代对象不能使用切片 这个时候可以使用collectio...
Python每日一练0003
python每日一练
2018-03-21
阅读 1 分钟
1.6k
问题 在每日一练0001中介绍了如何unpack一个可迭代对象,使用,运算符即可 但往往我们遇到的问题是可迭代对象中的数量是不确定的 这个时候该如何拿到我们想要的元素,比如我们只需要可迭代对象的第一个或者最后一个元素而已 解决方案 使用Python中的*运算符 例如我们需要拿到一个元组的第一个和最后一个元素 {代码...} 并...
Python每日一练0002
python每日一练
2018-03-20
阅读 2 分钟
1.7k
问题 如何序列化输出元素包含字符串元组的字符串元组(好绕) 举个例子 {代码...} 将zoo2输出为python, monkey, elephant 解决方案 容易想到使用join()函数,但join()函数要求元素必须都是字符串类型,否则会抛出TypeError错误 {代码...} 一个比较简单的方法是将zoo1给unpack进zoo2中,然后再将zoo2给unpack进print函数...
Python每日一练0001
python每日一练
2018-03-19
阅读 1 分钟
2.8k
问题 我们有一个包含N个元素的元组或序列,现在想把它分解为N个单独的变量。 例如我们有一个序列[1, 2, 3],想把1, 2, 3分别赋值给a, b, c三个变量。 解决方案 只需要简单的赋值就可以了,唯一的要求是变量的数量和序列的数量必须要一致 例如: {代码...} 但如果变量的整数和序列的数量不一致时,则会抛出ValueError异常...