在Python中使用list comprehension优于for
循环有什么好处?
主要是为了让它更具人性化,还是有其他理由使用列表理解而不是循环?
答案 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
循环。