咱们通常正常使用for循环是这样子的:学习
for i in range(10): print('表白:%s'% i)
一、能够看到咱们直接一个for循环可能你直接就拿到了它的所有数据,可是换成生成器表达式它即可以一个一个取值,从而也节约了占用内存空间。spa
固然也能够再用for循环一次洗取完值,能够说是很是方便又节约内存。code
# 一、生成器表达式 g = ('表白:%s' % i for i in range(10)) print(g) # 拿到的是:生成器 print('我是next:%s' % next(g)) # 可用next一个一个取值,至关于 __next__ 方法。 print('我是__next__:%s' % g.__next__()) for i in g: print(i)
二、生活中的例子:咱们春节在家里作汤圆,加入面粉足量的状况下,你家里作了100个家人们一块儿能吃完吗?blog
显然是不可能那么快的,那么咱们在家里就是这样作:先作20个吃完,再作,吃完再作,是否是很像生成器呢?内存
一、列表推导式:jenkins
ret = ['表白:%s' % i for i in range(10)] print(ret)
二、完整推导式,if 判断过滤,相似筛选功能for循环
# 如1:把 100 之内能被5整除的数 g = [i for i in range(100) if i % 5 == 0] print(g)
三、多层嵌套的推导式,先for外面层次,一层一层for。class
names = [['xiag', 'ee', 'asde', 'asde'], ['mina', 'andy', 'asdee', 'jenkinse']] ret = [name for lists in names for name in lists if name.count('a') >= 1] print(ret)
一、字典推导式:将 key 和 value 对调,变为{'23': 'a', '55': 'bb'}循环
# 将 key 和 value 对调,变为{'23': 'a', '55': 'bb'} dic = {'a': '23', 'bb': '55'} ret = {dic[i]: i for i in dic} print(ret)
二、集合推导式:自带去重功能,将1和4都是有重复,但打印出来是只有一个1和4;方法
# 集合推导式,自带去重功能 res = {x**2 for x in [1, -1, 2, -2, 3]} print(res)
总结:列表等各类推导式 与 生成器表达式 对比。
欢迎来你们QQ交流群一块儿学习:482713805