列表理解优于for循环的优势是什么?

时间:2013-05-02 15:20:32

标签: python list-comprehension

在Python中使用list comprehension优于for循环有什么好处?

主要是为了让它更具人性化,还是有其他理由使用列表理解而不是循环?

1 个答案:

答案 0 :(得分:44)

列表推导比构建列表的显式for循环更紧凑更快:

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

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

这是因为在.append()上调用list会导致列表对象增长(以块为单位)以单独为新元素腾出空间,而列表理解在创建{{{{}之前首先收集所有元素1}}一次性拟合元素:

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 循环。