What is the advantage of a list comprehension over a for loop?
What is the advantage of using a list comprehension over a for
loop in Python?
Is it mainly to make it more humanly readable, or are there other reasons to use a list comprehension instead of a loop?
Solution 1:
List comprehensions are more compact and faster than an explicit for
loop building a list:
def slower():
result = []
for elem in some_iterable:
result.append(elem)
return result
def faster():
return [elem for elem in some_iterable]
This is because calling .append()
on a list
causes the list object to grow (in chunks) to make space for new elements individually, while the list comprehension gathers all elements first before creating the list
to fit the elements in one go:
>>> 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
However, this does not mean you should start using list comprehensions for everything! A list comprehension will still build a list object; if you are using a list comprehension just because it gives you a one-line loop, think again. You are probably wasting cycles building a list object that you then discard again. Just stick to a normal for
loop in that case.