python-22-生成器表达式和列表等各种推导式

前言

我们一般正常使用for循环是这样子的:

for i in range(10):
    print('表白:%s'% i)

一、生成器表达式

1、可以看到我们直接一个for循环可能你直接就拿到了它的全部数据,但是换成生成器表达式它便可以一个一个取值,从而也节约了占用内存空间。

当然也可以再用for循环一次洗取完值,可以说是非常方便又节约内存。

# 1、生成器表达式
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)

 2、生活中的例子:我们春节在家里做汤圆,加入面粉足量的情况下,你家里做了100个家人们一起能吃完吗?

显然是不可能那么快的,那么我们在家里就是这样做:先做20个吃完,再做,吃完再做,是不是很像生成器呢?

二、列表等各种推导式

1、列表推导式:

ret = ['表白:%s' % i for i in range(10)]
print(ret)

2、完整推导式,if 判断过滤,类似筛选功能

# 如1:把 100 以内能被5整除的数
g = [i for i in range(100) if i % 5 == 0]
print(g)

 3、多层嵌套的推导式,先for外面层次,一层一层for。

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)

三、其他推导式

1、字典推导式:将 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)

 2、集合推导式:自带去重功能,将1和4都是有重复,但打印出来是只有一个1和4;

# 集合推导式,自带去重功能
res = {x**2 for x in [1, -1, 2, -2, 3]}
print(res)

总结:列表等各种推导式 与 生成器表达式 对比。

  • 1、括号不一样,列表、元组。
  • 2、返回值不一样,表达式几乎不占用内存

欢迎来大家QQ交流群一起学习:482713805

发布了83 篇原创文章 · 获赞 0 · 访问量 781

猜你喜欢

转载自blog.csdn.net/qq_42675140/article/details/104604522
今日推荐