36

在 Python中使用列表推导而不是循环有什么好处?for

主要是为了使其更具人类可读性,还是有其他理由使用列表推导而不是循环?

4

1 回答 1

58

列表推导比构建列表的显式循环更紧凑更快: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循环即可。

于 2013-05-02T15:23:37.263 回答