.user_profile{ display:block}

列表推导式和生成器表达式

列表推导式:

# ----- 列表推导式 ----
# 循环
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))
生成器表达式背后遵守了迭代器协议,可以逐个的产出元素,可以节省内存,而不是先建立一个完整的列表,然后再把这个列表传递到某个构造函数里。
posted @ 2018-06-20 15:28  软萌团子  阅读(112)  评论(0编辑  收藏  举报