列表推导式和生成器表达式
列表推导式:
# ----- 列表推导式 ---- # 循环 ls = [i for i in range(0,10)] # 筛选 ls_2 = [i for i in range(0,100) if i%2 == 0]
找到嵌套列表中名字含有两个‘e’的所有名字
names = [['Tom', 'Billy', 'Jefferson', 'Andrew', 'Wesley', 'Steven', 'Joe'], ['Alice', 'Jill', 'Ana', 'Wendy', 'Jennifer', 'Sherry', 'Eva']] # for lst in names for name in lst 最终要的是name print([name for lst in names for name in lst if name.count('e') >=2])
字典推导式
将一个字典的key和value对调:
mcase = {'a': 10, 'b': 34} dic = {mcase[k]:k for k in mcase} print(dic)
集合推导式
计算列表中每个值的平方,自动去重
squared = {x**2 for x in [1,-1,2]}
生成器表达式
1、把列表解析的[]换成()得到的就是生成器表达式。
2、列表解析和生成器表达式都是一种便利的变成方式,只不过生成器表达式更节省内存。
3、Python不但使用迭代器协议,让for循环变得更加通用。大部分内置函数,也是使用迭代器协议访问对象的。所以,我们可以直接这样计算一系列值得和:
sum(x ** 2 for x in range(4,8))
生成器表达式背后遵守了迭代器协议,可以逐个的产出元素,可以节省内存,而不是先建立一个完整的列表,然后再把这个列表传递到某个构造函数里。