Python列表解析和生成器

列表解析


列表解析来自函数式编程语言:Haskell, 它是一个非常有用的工具,可以动态的创建列表


列表解析的语法


[expr for iter_var in iterable]
expr是表达式,iter是迭代变量,它不需要是expr的一部分,但是for关键字是必须的,iterable代表可以迭代的变量,例如序列类型的对象:字符串,列表,元组,还有映射类型的对象,即字典,或者是实现了__iter__()和next()方法的类也可以。


>>> [x + 2 for x in range(3)]
[2, 3, 4]




看出来列表中每个元素都增加了2


列表解析增加判断条件

>>> [x + 2 for x in range(10) if  x % 2]
[3, 5, 7, 9, 11]
在这里,我们增加了一个判断条件 x % 2,如果 x % 2 == 1,也就是说x是奇数的时候,我们将其加2并且加入到列表中,于是就生成了列表[3, 5, 7, 9, 11]


列表解析实现多个for循环嵌套

我们可以用一个列表解析表达式,实现多个for循环嵌套:

>>> [(x, y) for x in range(3) for y in range(4)]
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3)]

这个表达式代表一个嵌套循环,等价于以下语句
>>> a = []
>>> for x in range(3):
...     for y in range(4):
...             a.append((x, y))
... 
>>> a
[(0, 0), (0, 1), (0, 2), (0, 3), (1, 0), (1, 1), (1, 2), (1, 3), (2, 0), (2, 1), (2, 2), (2, 3)]
可以看出,列表解析表达式可以极大的减少代码量,而且也不失可读性,另外,列表解析表达式的效率也很高,可以取代内建的map()函数和lambda表达式

生成器表达式


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值