python高级编程--列表推导

每当要对序列中的内容进行循环处理时,就应该尝试用列表推导来代替它。
例1:
下面的程序是获取10以内的偶数,一般的实现方式可能如下:

>>> numbers = range(10)
>>> size = len(numbers)
>>> evens = []
>>> i = 0
>>> while i < size:
...     if i % 2 == 0:
...         evens.append(i)
...     i += 1
... 
>>> evens
[0, 2, 4, 6, 8]

这对于c语言而言可能速速没有什么影响,但是在python下会是程序的执行速度变慢:
因为:
1、它使解释程序在每次循环中都要确定序系中的哪一个部分被修改:
2、他似的必须通过国一个计数器来跟踪必须处理的元素。
这种情况,推荐使用列表推导方式,代码更简洁、高效,涉及的元素也更少。在更大的程序中,这意味着引入的缺陷更少,代码更容易阅读和理解

>>> [i for i in range(10) if i % 2 == 0]
[0, 2, 4, 6, 8] 

例2:

关于enumerate的经典例子
>>> i = 0
>>> seq = ["one", "two", "three"]
>>> for element in seq:
...     seq[i] = '%d: %s' % (i, seq[i])
...     i += 1
... 
>>> seq
['0: one', '1: two', '2: three']

可以使用enumerate,这个内建函数为在循环中使用序列时提供了更加便利的获取索引的方式

>>> seq = ["one", "two", "three"]
>>> for i, element in enumerate(seq):
...     seq[i] = '%d: %s' % (i, seq[i])
... 
>>> seq
['0: one', '1: two', '2: three']

当然,还可以用列表推导的方式将其重构

>>> def _treatment(pos, element):
...     return '%d: %s' % (pos, element)
... 
>>> seq = ["one", "two", "three"]
>>> [_treatment(i, el) for i, el in enumerate(seq)]
['0: one', '1: two', '2: three']



最后,这个版本的代码更容易矢量化,因为它共享了基于序列中单哥项目的小函数。






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值