DEV Community

Beatris Ilieva
Beatris Ilieva

Posted on

List Comprehension in Python: Syntax, Examples, and When to Use Regular For Loops

What is List Comprehension?

List comprehension is a concise syntax for creating a new list by applying an expression to each item in an iterable. An iterable is any object that can be looped through, such as a list, range, or string. List comprehension is faster and more Pythonic than regular for loops.

Why is List Comprehension Faster?

Python itself is written in the C programming language. The Python interpreter—the program that reads and executes our Python code—was created using C and then compiled into machine code. When we use list comprehension, we call optimized C code that has already been compiled into machine code. In contrast, a regular for loop requires Python to interpret each line and translate it to machine code one step at a time. Since the C code is already compiled and ready to execute, list comprehension runs much faster, especially with large lists.

When to Use List Comprehension

List comprehension works best in specific situations. We should use list comprehension for simple transformations such as multiplying, filtering, or converting values. It is ideal when the code fits on one line and remains easy to read. We should also use list comprehension when we need a new list as the result and when we want better performance with simple operations.

When to Use Regular For Loops

There are cases where a regular for loop is more appropriate. We should use a regular for loop for complex logic with multiple conditions or multiple operations inside the loop. We should also use a regular for loop when readability would suffer from compression. Additionally, we should use a regular for loop when we do not need to create a new list and are just processing data. Finally, we should use a regular for loop for deep nesting with more than two levels.

Examples of List Comprehension and For Loops

Example 1: Simple Transformation with List Comprehension

When we need to transform each element in a list, list comprehension provides a clean and efficient solution.

# Example 1: Simple transformation - squaring numbers
# With list comprehension (concise and fast)
numbers = [1, 2, 3, 4, 5]
squared = [n ** 2 for n in numbers]
print(squared)  # Output: [1, 4, 9, 16, 25]

# With regular for loop (more verbose)
numbers = [1, 2, 3, 4, 5]
squared = []
for n in numbers:
    squared.append(n ** 2)
print(squared)  # Output: [1, 4, 9, 16, 25]
Enter fullscreen mode Exit fullscreen mode

Both approaches produce the same result. The list comprehension approach requires fewer lines of code and executes faster.

Example 2: Filtering with a Condition

List comprehension becomes even more valuable when we need to filter items based on a condition.

# Example 2: With condition - filtering even numbers
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
evens = [n for n in numbers if n % 2 == 0]
print(evens)  # Output: [2, 4, 6, 8]
Enter fullscreen mode Exit fullscreen mode

The condition if n % 2 == 0 filters the list to include only even numbers. This single line accomplishes both filtering and list creation.

Example 3: When Not to Use List Comprehension

When logic becomes too complex, a regular for loop provides better readability.

# Example 3: When NOT to use list comprehension - complex logic
# Bad (hard to read)
result = [x * 2 if x % 2 == 0 else x * 3 if x % 3 == 0 else x for x in range(10)]

# Good (clear and readable)
result = []
for x in range(10):
    if x % 2 == 0:
        result.append(x * 2)
    elif x % 3 == 0:
        result.append(x * 3)
    else:
        result.append(x)
print(result)  # Output: [0, 3, 4, 9, 8, 15, 12, 21, 16, 27]
Enter fullscreen mode Exit fullscreen mode

The second version with a regular for loop is much easier to understand. We can see exactly what conditions are checked and what actions are taken in each case.

Key Takeaways

  • List comprehension is a concise syntax for creating a new list by applying an expression to each item in an iterable such as a list, range, or string
  • List comprehension is faster and more Pythonic than regular for loops for simple transformations
  • Python is written in C, and list comprehension calls optimized C code that has already been compiled into machine code
  • Use list comprehension for simple transformations, filtering, or converting values when the code fits on one line and is easy to read
  • Use regular for loops for complex logic with multiple conditions, multiple operations inside the loop, or deep nesting with more than two levels
  • Readability is important: a slower but readable solution is often better than a faster solution that is difficult to understand
  • List comprehension creates a new list, while regular for loops can be used just for processing data without creating a new list
  • Performance benefit of list comprehension comes from its optimized implementation, but clarity should always take priority in code design

Top comments (0)