Python列表推导式和生成器表达式的异同

和列表一样, 列表推导式 也采用方括号[]表示,并且用到了一个简写版的for循环,第一部分是一个生成结果列表元素的表达式,第二部分是一个输入表达式上的循环。阅读理解列表表达式的推荐做法是先从里面的for循环开始,向右查看是否有if条件,然后将推导式开始的那个表达式映射到每一个匹配的元素上去。
[python]  view plain  copy
  1. >>> even_numbers = [x for x in range(10if x%2 == 0]  
  2. >>> even_numbers  
  3. [0,2,4,6,8]  

以上例子展示了使用if语句来过滤元素。


Python还支持另外一种和列表表达式类似的结构,叫做生成器表达式(generator expression),除了它有一种称之为“惰性计算”的特点以外,它和列表推导式的用法基本一致。它的工作方式是每次处理一个对象,而不是一口气处理和构造整个数据结构,这样做的潜在优点是可以节省大量的内存

[python]  view plain  copy
  1. >>> even_numbers = (x for x in range(10000if x%2 == 0)  
  2. >>> even_numbers  
  3. <generator object at 0x....>  
在处理大量的数据是,最好考虑生成器表达式而不是列表推导式。

另一个列表推导式和生成器表达式的例子是:

[python]  view plain  copy
  1. >>> data = ['abc','def','I use python''hong201']  
  2. >>> sum([len(word) for word in data])  
  3. 25  
  4. >>> sum(len(word) for word in data)  
  5. 25  

enumerate()是一个同时能让你迭代和计数的内置函数,而for循环自身只能迭代而没办法计数:

[python]  view plain  copy
  1. >>> data = [123,"abc",3.14]  
  2. >>> for i in enumerate(data):  
  3. ...     print i  
  4. ...  
  5. (0123)  
  6. (1'abc')  
  7. (23.14)  


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值