Python列表推导式和生成器表达式
2014-10-23 10:58
543 查看
和列表一样,列表推导式也采用方括号[]表示,并且用到了一个简写版的for循环,第一部分是一个生成结果列表元素的表达式,第二部分是一个输入表达式上的循环。阅读理解列表表达式的推荐做法是先从里面的for循环开始,向右查看是否有if条件,然后将推导式开始的那个表达式映射到每一个匹配的元素上去。
以上例子展示了使用if语句来过滤元素。
Python还支持另外一种和列表表达式类似的结构,叫做生成器表达式(generator expression),除了它有一种称之为“惰性计算”的特点以外,它和列表推导式的用法基本一致。它的工作方式是每次处理一个对象,而不是一口气处理和构造整个数据结构,这样做的潜在优点是可以节省大量的内存。
另一个列表推导式和生成器表达式的例子是:
enumerate()是一个同时能让你迭代和计数的内置函数,而for循环自身只能迭代而没办法计数:
>>> even_numbers = [x for x in range(10) if x%2 == 0] >>> even_numbers [0,2,4,6,8]
以上例子展示了使用if语句来过滤元素。
Python还支持另外一种和列表表达式类似的结构,叫做生成器表达式(generator expression),除了它有一种称之为“惰性计算”的特点以外,它和列表推导式的用法基本一致。它的工作方式是每次处理一个对象,而不是一口气处理和构造整个数据结构,这样做的潜在优点是可以节省大量的内存。
>>> even_numbers = (x for x in range(10000) if x%2 == 0) >>> even_numbers <generator object at 0x....>在处理大量的数据是,最好考虑生成器表达式而不是列表推导式。
另一个列表推导式和生成器表达式的例子是:
>>> data = ['abc','def','I use python', 'hong201'] >>> sum([len(word) for word in data]) 25 >>> sum(len(word) for word in data) 25
enumerate()是一个同时能让你迭代和计数的内置函数,而for循环自身只能迭代而没办法计数:
>>> data = [123,"abc",3.14] >>> for i in enumerate(data): ... print i ... (0, 123) (1, 'abc') (2, 3.14)
相关文章推荐
- python全栈开发- day14列表推导式、生成器表达式、模块基础
- python-基础知识之三元表达式、列表推导式、生成器表达式
- 流畅的python笔记2.2 列表推导式和生成器表达式
- Python列表推导式和生成器表达式的异同
- python 三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数
- Python列表推导式与生成器表达式用法示例
- python生成器表达式和列表解析
- python基础之协程函数、列表表达式、生成器表达式
- python 中的列表解析和生成器表达式
- Python 列表解析和生成器表达式
- Python语言学习讲解十一:生成器表达式改写较大的列表推导
- Python - 列表解析式/生成器表达式
- Python基础:08列表解析与生成器表达式
- python 列表表达式和生成器表达式
- python 列表表达式、生成器表达式和协程函数
- Python(8): Lambda,列表解析器,生成器表达式,range函数
- 零基础学python-19.8 生成器表达式:当迭代器遇上列表解析
- Python 生成器函数,生成器表达式,迭代器,列表解析
- Python的列表推导式、迭代器、生成器
- 零基础学python-19.8 生成器表达式:当迭代器遇上列表解析