Python 中列表推导(list comprehension)相对于循环有什么优势?性能会更高吗?

WBOY
풀어 주다: 2016-06-06 16:22:16
원래의
1606명이 탐색했습니다.

python中的列表推导(list comprehension)一般用于从一个列表计算出另一个列表,从功能上看是map/filter的结合体,也能通过循环实现。之前查过的一些相关的资料,有人说列表推导只是语法糖,也有说列表推导比循环和map/filter的写法效率更高(只给了一个测试结果,没有相关分析),其他有价值的资料就没有找到了...这是某次一个面试官问的问题,我想还是要搞清楚吧,所以就来知乎请教各位大神了。
python的设计哲学里,有一句“There should be one-- and preferably only one --obvious way to do it.”,那么如果列表推导和循环以及map/filter实现上没有什么区别的话,应该就不会存在了吧?当然python的哲学里还有“Beautiful is better than ugly.”,貌似也有可能只是为了好看的样子...

回复内容:

首先肯定 map 和列表推导效率确实会比循环的高,

先说列表推导,下边是我在 ipython 里的测试结果(测试环境 Python 2.7.10):

<code class="language-text">>>> long_list = range(1000)

>>> a = []

>>> %timeit for i in long_list: a.append(i+1)
10000 loops, best of 3: 100 µs per loop

>>> %timeit [i+1 for i in long_list]
10000 loops, best of 3: 43.3 µs per loop
</code>
로그인 후 복사
效率高一点,去看 dis 模块。

Python 不喜欢 FP 的,而且 map / filter 是惰性的,list comprehension 不是。

循环比 list comprehension 更底层而难以被理解一些。比较:「把这个列表里的所有元素乘以二」和「创建一个空列表 B,对列表 A 里的每一个元素,将其乘以二的结果添加到 B 的尾部」。

PS: 对于每一个可以用多种途径实现的用例,我基本上都可以确定一个最优的途径。
관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!