What is the advantage of a list comprehension over

2019-01-05 03:53发布

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?

1条回答
仙女界的扛把子
2楼-- · 2019-01-05 04:23

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.

查看更多
登录 后发表回答