- 博客(25)
- 收藏
- 关注
原创 Python每日一练0030
问题 如何判断一个list包含另一个list 例如我有两个list List1 = ['a','c','c'] List2 = ['x','b','a','x','c','y','c'] 如何判断list2包含了list1 解决方案 如果元素的数量不重要,也就是说只判断list1里的所有种类在list2都有出现过,那么使用set()即可 >>> List...
2018-05-09 22:20:16 270
原创 Python中鲜为人知的特性(一)
问题 Python中鲜为人知的特性(一) 讨论 函数参数unpack def foo(x, y): print x, y alist = [1, 2] adict = {'x': 1, 'y': 2} foo(*alist) # 1, 2 foo(**adict) # 1, 2 链式比较操作符 >>> x = 3 >>> ...
2018-05-02 13:50:43 172
原创 Python每日一练0023
问题 如何判断一个文件是否存在 解决方案 这个问题可以分成几类问题 如果这里的文件指的是文件或目录,我们可以用os.path.exists()方法 >>> import os >>> os.path.exists('test') True 如果这里的文件指的是普通的文件,我们可以用os.path.isfile()方法 >>&...
2018-04-20 23:15:19 162
原创 Python每日一练0022
问题 你想在一个文件里每次读入固定大小的字节,比如每次读入4个字节并转成int,或者每次读入x个字节并进行结构化,例如: l = [5, 2, 4, 1, 2, 4, 5, 6, 8] with open('test', 'wb') as fd: for num in l: fd.write(num.to_bytes(4, 'big')) 解决方案 可以简单...
2018-04-19 23:25:09 153
原创 Python每日一练0021
问题 如何像操作文件一样操作str或bytes 类似于C++中的stringstream 解决方案 使用io模块中的StringIO和BytesIO 调用他们的构造函数得到一个io对象 >>> import io >>> sio = io.StringIO() >>> bio = io.BytesIO() 然后就可以像文件...
2018-04-18 10:52:07 173
原创 Python每日一练0020
问题 你需要执行简单的日期操作,计算两个日期间隔多少天、某个日期后的多少天是几月几日、转换时间字符串的格式等 解决方案 使用datetime库中的datetime和timedelta类 其中datetime类代表一个日期 + 时间,例如2018年4月16日11点00分00秒;timedelta类代表一个日期间隔 对于datetime实例,可以直接进行-数学运算得到一个timedelt...
2018-04-16 13:50:32 217
原创 Python每日一练0019
问题 Python中如何将int在十进制和二、八、十六进制之间互相转换 解决方案 十进制向二、八、十六进制转换 分别使用bin、oct、hex >>> a = 123 >>> bin(a) '0b1111011' >>> oct(a) '0o173' >>> hex(a) '0x7b' 这样转换会有一个前缀...
2018-04-14 10:30:40 142
原创 Python每日一练0018
问题 你需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现。 Python的float类型是存在误差的 >>> a = 1.1 >>> b = 2.2 >>> a + b == 3.3 False >>> a + b 3.3000000000000003 解决方案 使用decimal模块,但要注意参...
2018-04-13 22:34:07 1312
原创 Python每日一练0017
问题 你有一些长字符串,想以指定的列宽将它们重新格式化。 解决方案 使用textwrap模块的fill或wrap函数 假设有一个很长的字符串 s = "Look into my eyes, look into my eyes, the eyes, the eyes, \ the eyes, not around the eyes, don't look around the ey...
2018-04-12 23:15:16 163
原创 Python每日一练0016
问题 你想去掉文本字符串开头,结尾或者中间不想要的字符,比如空白。 解决方案 对于简单的文本替换,我们可以使用[lr]strip和replace strip() 方法能用于删除开始或结尾的字符。 lstrip() 和 rstrip() 分别从左和从右执行删除操作。 默认情况下,这些方法会去除空白字符,但是你也可以指定其他字符集合。 >>> ' spaciou...
2018-04-11 14:51:43 283
原创 Python每日一练0015
问题 如何比较两个字面一样,但字节不一样的字符串 例如: >>> a = u'\u4eba\u53e3\u3058\u3093\u3053\u3046\u306b\u81be\u7099\u304b\u3044\u3057\u3083\u3059\u308b' >>> b = u'\u4eba\u53e3\u3058\u3093\u3053\u3046...
2018-04-10 22:13:16 117
原创 Python每日一练0014
问题 你想使用 Unix Shell 中常用的通配符(比如 *.py , Dat[0-9]*.csv 等)去匹配文本字符串 解决方案 使用fnmatch模块的fnmatch或fnmatchcase函数 >>> import fnmatch >>> print(fnmatch.fnmatch('hello.py', '*.py')) True &g...
2018-04-09 14:22:36 105
原创 Python每日一练0013
问题 现在有多个字典或者映射,你想将它们从逻辑上合并为一个单一的映射后执行某些操作, 比如查找值或者检查某些键是否存在。 解决方案 使用collections库的ChainMap类,可以快速的将多个dict合并在一起 >>> from collections import ChainMap >>> a = {'x': 1, 'z': 3 } &g...
2018-04-06 23:14:23 110
原创 Python每日一练0012
问题 如何获取本机内网或外网IP? 解决方案 获取内网IP: def get_host_ip(): with socket.socket(socket.AF_INET, socket.SOCK_DGRAM) as s: s.connect(('8.8.8.8', 80)) return s.getsockname()[0] 获取外网IP: ...
2018-04-04 23:14:56 226
原创 Python每日一练0011
问题 你有一段通过下标访问列表或者元组中元素的代码,但是这样有时候会使得你的代码难以阅读, 于是你想通过名称来访问元素。 解决方案 使用collections.namedtuple 函数,例如我们经常使用一个tuple表示一个坐标点的时候 >>> from collections import namedtuple >>> Point = nam...
2018-04-03 14:51:01 138
原创 Python每日一练0010
问题 你有一个字典或者实例的序列,然后你想根据某个特定的字段来分组迭代访问。 解决方案 使用itertools.groupby() 函数 假设有下列的字典列表: rows = [ {'address': '5412 N CLARK', 'date': '07/01/2012'}, {'address': '5148 N CLARK', 'date': '07/04...
2018-04-02 13:04:46 363
原创 Python每日一练0009
问题 怎样找出一个序列中出现次数最多的元素? 解决方案 使用collections库中的Counter对象可以方便的求出现次数最多的前N个元素 直接使用most_common成员函数就好了,例如: from collections import Counter words = [ 'look', 'into', 'my', 'eyes', 'look', 'into', ...
2018-03-29 11:28:23 199
原创 Python每日一练0008
问题 怎样在两个字典中寻寻找相同点(比如相同的键、相同的值等等)? 解决方案 直接对keys()或者items()使用集合操作,比如-(差)、|(并)、&(交) 考虑下面两个字典: a = { 'x': 1, 'y': 2, 'z': 3, } b = { 'w': 10, 'x': 11, 'y': 2, } 要找到相同...
2018-03-28 11:04:24 172
原创 Python每日一练0007
问题 怎样实现一个键对应多个值的字典(也叫 multidict)? 例如: d = { 'a' : [1, 2, 3], 'b' : [4, 5] } e = { 'a' : {1, 2, 3}, 'b' : {4, 5} } 解决方案 使用collections模块中的defaultdict类 defaultdict的特点是,当key不存在时,...
2018-03-26 16:06:59 175
原创 Python每日一练0006
问题 在某个集合中找到最大或最小的N个元素 解决方案 使用heapq模块 heapq.nlargest(n, iterable, key=None) heapq.nsmallest(n, iterable, key=None) 例如: >>> import heapq >>> l = [9, -2, 0, 8, 1, 3] ...
2018-03-25 20:34:48 191
原创 Python每日一练0005
问题 如何对一个元素是列表的列表进行排序,排序规则是:首先按长度排序,其次按列表的字典序进行排序 一个例子: list1 = [[0, 4, 1, 5], [3, 1, 5], [4, 0, 1, 5]]排序后为list1 = [[3, 1, 5], [0, 4, 1, 5], [4, 0, 1, 5]] 另一个例子: list2 = [[4, 5, 2], [2, 5, 4], [2,...
2018-03-23 13:48:42 197
原创 Python每日一练0004
问题 如何保存迭代对象的最后N个元素 例如保存列表['a', 'b', 'c', 'd']的最后2个元素 或者保存某个迭代器对象的最后5个元素 解决方案 对于列表、元组这样的数据结构,可以使用切片来很方便的实现,例如保存列表l的最后3个元素就可以直接l[-3:] 但有些时候,我们操作的可迭代对象不能使用切片 这个时候可以使用collections库里的deque(双端队列)数据结...
2018-03-22 13:33:04 254
原创 Python每日一练0003
问题 在每日一练0001中介绍了如何unpack一个可迭代对象,使用,运算符即可 但往往我们遇到的问题是可迭代对象中的数量是不确定的 这个时候该如何拿到我们想要的元素,比如我们只需要可迭代对象的第一个或者最后一个元素而已 解决方案 使用Python中的*运算符 例如我们需要拿到一个元组的第一个和最后一个元素 >>> zoo = ('monkey', 'cam...
2018-03-22 13:32:38 167
原创 Python每日一练0002
问题 如何序列化输出元素包含字符串元组的字符串元组(好绕) 举个例子 >>> zoo1 = ('monkey', 'elephant') >>> zoo2 = ('python', zoo1) 将zoo2输出为python, monkey, elephant 解决方案 容易想到使用join()函数,但join()函数要求元素必须都是字符串类型...
2018-03-22 13:32:18 296
原创 Python每日一练0001
问题 我们有一个包含N个元素的元组或序列,现在想把它分解为N个单独的变量。 例如我们有一个序列[1, 2, 3],想把1, 2, 3分别赋值给a, b, c三个变量。 解决方案 只需要简单的赋值就可以了,唯一的要求是变量的数量和序列的数量必须要一致 例如: >>> l = ['foo', 5, 'bar'] >>> a, b, c = l &...
2018-03-22 13:31:34 596
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人