Python中的列表生成式
用过Python的人一定对它的列表生成式(List Comprehensions)印象非常深刻。刚接触列表生成式的时候可能会有点懵,但一旦适应了之后肯定会喜欢其简洁高效的语法。下面把我经常使用的列表生成式做一个总结,欢迎指正。
数据再运算
a = range(0, 10)
b = [x * 2 for x in a]
其运算结果会返回一个新的列表
数据类型转换
r = range(0, 10)
s = [str(x) for x in a]
排列组合
[a + b for a in 'ABC' for b in '123']
其输出为:
['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
使用if做筛选
b = [x*2 for x in a if x%2==0]
把赋值与筛选写在一起:
b = [x*2 for x in range(1, 10) if x%2==0]
稍微复杂一点的,找到所有在list1中,但不在list2中的元素:
list3 = [item for item in list1 if item not in list2]
打印键值对
遍历Python字典,并以自定义方式打印字典中的键值对:
downloads = {'Jan': 250, 'Feb': 382, 'Mar': 422}
[k+'=' + str(v) for k,v in downloads.items()]
针对文件系统使用列表生成式
一条语句列举出”/var/log”中所有以”log”为扩展名的文件:
[f for f in os.listdir("/var/log") if f.endswith('.log')]
函数分组
在列表生成式中,可以根据函数的返回值进行分组。比如:根据首字母是否为“c“对一个列表中的所有单词进行分组:
def group_by(lst, fn):
return [
[x for x in lst if fn(x)],
[x for x in lst if not fn(x)]
]
group_by(['fox', 'dog', 'cat', 'people', 'cow', 'chicken'], lambda x: x[0] == 'c')
其输出为:
[['cat', 'cow', 'chicken'], ['fox', 'dog', 'people']]