列表理解比for循环有什么优势?

问题描述

列表理解比构建列表的显式循环更紧凑 更快捷for

def slower():
    result = []
    for elem in some_iterable:
        result.append(elem)
    return result

def faster():
    return [elem for elem in some_iterable]

这是因为调用.append()alist会导致列表对象增长(以块为单位),从而分别为新元素腾出空间,而列表推导会首先创建所有元素,然后再创建一次list以适合元素:

>>> some_iterable = range(1000)
>>> import timeit
>>> timeit.timeit('f()', 'from __main__ import slower as f', number=10000)
1.4456570148468018
>>> timeit.timeit('f()', 'from __main__ import faster as f', number=10000)
0.49323201179504395

但是,这并不意味着您应该开始对所有内容使用列表推导!列表理解仍将 建立一个列表对象 ; 如果您使用列表理解只是因为它给您带来了单行循环,请再考虑一下。您可能在浪费时间来构建列表对象,然后再次将其丢弃。for在这种情况下,只需坚持正常循环即可。

解决方法

在Python中的循环上使用列表理解有什么优势for

是主要是使其更具可读性,还是有其他原因使用列表理解而不是循环?

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...