Fluent Python chapter2--列表推导和生成器表达式

列表推导和生成器表达式

#例子1
lst = [i for i in range(5)]  #列表推导
# lst2 = list(i for i in range(5)) #括号内是生成器表达式


s = (str(i) for i in range(5))   #产生生成器

print(lst)
print(s)

#结果输出
[0, 1, 2, 3, 4]
<generator object <genexpr> at 0x00000254299C9ED0>


#例子2
for i in s:   #由生成器产生
    print(i)
 
# for i in [i for i in range(5)]:  #先生成列表再迭代
#     print(i)   

#结果输出
0
1
2
3
4

列表推导可以看作是使用for语句生成列表的简约表达式。
生成器与列表推导的形式上的主要区别是列表推导用[]来围起来,返回的是列表,而生成器表达式用()围起来,返回的是生成器,这是一个可迭代的对象。
生成器的优点是每次只产生一个输出,能够节省内存的消耗。这种优势来源于生成器表达式仅仅定义操作,而操作的执行是生成器被调用时发生

当把生成器表作为参数,且只需要传入一个参数时,可以不需要括号。从这个角度来看列表推导是生成器在产生列表方面的应用
在生成列表方面,列表推导与使用生成器表达式的内存消耗应该是等价的,参照例子1。
但是如果先生成列表再迭代,那么内存消耗显然是大于生成器表达式的。参照例子2,因为生成器本身就是可以迭代的,生成列表是一种冗余的操作,除非列表已经存在。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值