您的位置:首页 > 编程语言 > Python开发

Python列表解析和生成器

2016-12-24 14:57 239 查看

列表解析

列表解析来自函数式编程语言: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表达式

生成器表达式

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Python