列表解析(list comprehension)提供了一种优雅的生成列表的方法,能用一行代码代替十几行代码,而且不损失任何可读性。而且比起使用map和lambda表达式,性能还快很多
如将整数列表转换为bool列表
lst = [123,453,-546,23,-646,1,245,4363,112,9,0,2,-12]
# 一般实现方式
tmp = []
for x in lst:
if x > 0:
tmp.append(1)
else:
tmp.append(0)
# map实现
def func(x):
if x > 0:
return 1
else:
return 0
tmp = list(map(func, lst))
# 列表解析式实现
tmp = [1 if x > 0 else 0 for x in lst ]
提取出字符串里的所有单词的首字母
text = 'My name is TangHao'
tmp = [word[0] for word in text.split()]
获取一个全为’tang’的列表
lst = ['tang' for i in range(10)]
获取两个列表对应元素的乘积
lst1 = [1,2,3]
lst2 = [4,5,6]
lst = [x*y for x,y in zip(lst1,lst2)]
解开嵌套列表使其变为普通列表
lst = [[1,2,3],[2,5],[26,7],[3,7,8,9]]
result = [x for i in lst for x in i]
求所有可能的组合
from itertools import product
x=['a','b','c']
results = ["".join(i) for i in product(x, repeat=3)]
与列表解析式类似,字典解析式的第一部分是一个键值对
dic = {'tang':20, 'wang':18, 'meng':15}
d = {k:v for k,v in dic.items() if v > 18}
集合解析式和列表解析式很类似,就是需要把列表解析式的中括号换为大括号
lst = [1,2,3,4,5,6,6,6,7,8]
st = {x for x in lst if x > 3}