Home  >  Article  >  Backend Development  >  Why Are List Comprehensions Faster Than List Appending in Python?

Why Are List Comprehensions Faster Than List Appending in Python?

Barbara Streisand
Barbara StreisandOriginal
2024-10-28 16:58:29123browse

Why Are List Comprehensions Faster Than List Appending in Python?

Why List Comprehensions Outperform List Appending

Despite the perception of list comprehensions as merely expressive sugar, they demonstrate a significant speed advantage over list appending. This disparity extends beyond expressive differences.

To illustrate, consider the following timeit benchmarks:

<code class="python">import timeit

time = timeit.timeit('t=[]\nfor i in range(10000):\n    t.append(i)', number=10000)
time2 = timeit.timeit('t=[i for i in range(10000)]', number=10000)</code>

The results reveal that list comprehensions execute approximately 50% faster than appending to a list.

Reasons for Increased Speed

List comprehensions exploit several performance optimizations:

  • Elimination of Attribute Loading and Function Calls: In list appending, each iteration requires loading the append attribute of the list and invoking it as a function. List comprehensions eliminate this overhead by creating a new list on demand.
  • Suspension and Resumption vs. Instant List Creation: Suspending and resuming a function's frame is generally slower than directly creating a list on demand.

Examples

Consider the following code snippets:

<code class="python">def f1():
    l = []                                    # Create a new list
    for i in range(5):                      # Iterate through a range
        l.append(i)                         # Append each number to the list

def f2():
    [i for i in range(5)]                  # Use list comprehension to create a new list</code>

Disassembling these functions with the dis module reveals the differences:

<code class="python">dis.dis(f1)
dis.dis(f2)</code>

In f1, we observe the creation of a list and the loading and calling of the append attribute (offsets 18 and 20). In f2, however, these operations are absent, resulting in a more efficient code.

Conclusion

List comprehensions achieve improved performance by eliminating attribute loading, function calls, and the overhead associated with suspension and resumption of function frames. Consequently, they are often recommended for creating new lists where speed is a priority.

The above is the detailed content of Why Are List Comprehensions Faster Than List Appending in Python?. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn