列表解析(列表推导式)是非常有用,简单灵活的工具,可以动态的创建列表。
[ expr for iter_var in iterable ]
iterable是一个可迭代对象 expr是元素的处理结果;
列表解析就是在一行代码中写了一个for循环;结果返回的是一个列表
例1:我要创建一个[0,1,4,9,16,25]列表
1)传统函数式编程:
map(lambda(x:x**2),range(6))
2)列表解析:(效率更高!)
[x**2 for x in range(6)]
可以看到新的语句中只调用了一个函数range(),原来的语句用了三个函数map(),lambda(), range()
[ expr for iter_var in iterable if cond_expr]
过滤或捕获满足条件的表达式 cond_expr 的序列成员
seq = [11,22,32,33,15,8,9,7,9,16,15]
l = [x for x in seq if x%2==1]
print(l)
生成器表达式和列表解析的差别仅在 ()
genetor = ( expr for iter_var in iterable if cond_expr)
with open('测试','r',encoding='utf-8') as f:
n = len([word for line in f for word in line.split()])#单词的个数
f.seek(0)#将文件指针移动到开始
s = sum([len(word) for line in f for word in line.strip()])#非空字符串的个数
print(n,s)
with open('测试','r',encoding='utf-8') as f:
q = max((len(line.strip())for line in f))
print(q)
rows = ['a','b','c','d']
cols = [1,2,3,4]
ret = ((x,y) for x in rows for y in cols)#ret是一个生成器,要用for循环遍历输出
for i in ret:
print(i,end=',')