Bird
Raised Fist0
Pythonprogramming~5 mins

List comprehension vs loop in Python

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction

List comprehension is a quick way to create lists. Loops do the same but take more lines. Both help make new lists from old ones.

When you want to make a new list by changing or filtering items from another list.
When you want your code to be shorter and easier to read.
When you need to do simple operations on each item in a list.
When you want to avoid writing many lines of code for creating lists.
When you want to clearly show how a list is built from another list.
Syntax
Python
### List comprehension syntax:
new_list = [expression for item in old_list if condition]

### Loop syntax:
new_list = []
for item in old_list:
    if condition:
        new_list.append(expression)

List comprehension combines loop and condition in one line.

Loops are more flexible for complex tasks but longer.

Examples
List comprehension to get squares of numbers.
Python
numbers = [1, 2, 3, 4, 5]
squares = [n * n for n in numbers]
Loop doing the same as above.
Python
numbers = [1, 2, 3, 4, 5]
squares = []
for n in numbers:
    squares.append(n * n)
List comprehension on empty list returns empty list.
Python
empty_list = []
result = [x for x in empty_list]
print(result)
List comprehension with one item doubles it.
Python
single_item = [10]
result = [x * 2 for x in single_item]
print(result)
Sample Program

This program shows how to get squares of numbers using both loop and list comprehension. Both give the same result.

Python
numbers = [1, 2, 3, 4, 5]

# Using loop
squares_loop = []
for number in numbers:
    squares_loop.append(number * number)

print("Squares using loop:", squares_loop)

# Using list comprehension
squares_comp = [number * number for number in numbers]
print("Squares using list comprehension:", squares_comp)
OutputSuccess
Important Notes

List comprehension is usually faster than loops because it is optimized internally.

Loops are better when you need multiple steps or complex logic inside.

Common mistake: forgetting to append in loops, which list comprehension handles automatically.

Use list comprehension for simple, clear list creation; use loops for complex tasks.

Summary

List comprehension is a short, readable way to create lists.

Loops are more flexible but take more lines.

Both produce the same results for simple list creation tasks.

Practice

(1/5)
1. What is the main advantage of using list comprehension over a traditional for loop in Python?
easy
A. It runs slower than a loop
B. It creates lists in fewer lines and is more readable
C. It cannot be used to create lists
D. It requires more code to write

Solution

  1. Step 1: Understand list comprehension purpose

    List comprehension is designed to create lists in a concise and readable way.
  2. Step 2: Compare with traditional loops

    Traditional loops require more lines and are less compact than list comprehensions.
  3. Final Answer:

    It creates lists in fewer lines and is more readable -> Option B
  4. Quick Check:

    List comprehension = concise and readable [OK]
Hint: List comprehension is shorter and clearer than loops [OK]
Common Mistakes:
  • Thinking list comprehension is slower
  • Believing list comprehension can't create lists
  • Confusing loops as always simpler
2. Which of the following is the correct syntax for a list comprehension that creates a list of squares of numbers from 0 to 4?
easy
A. [x**2 for x in range(5)]
B. [for x in range(5) x**2]
C. [x^2 in range(5)]
D. for x in range(5): x**2

Solution

  1. Step 1: Recall list comprehension syntax

    The correct syntax is: [expression for variable in iterable].
  2. Step 2: Check each option

    [x**2 for x in range(5)] matches the correct syntax. Others have syntax errors or missing parts.
  3. Final Answer:

    [x**2 for x in range(5)] -> Option A
  4. Quick Check:

    Correct list comprehension syntax = [x**2 for x in range(5)] [OK]
Hint: Remember: [expression for variable in iterable] [OK]
Common Mistakes:
  • Placing 'for' after expression
  • Using ^ instead of ** for power
  • Writing loop without brackets
3. What is the output of the following code?
nums = [1, 2, 3]
squares = []
for n in nums:
    squares.append(n**2)
print(squares)
medium
A. [1, 2, 3]
B. [2, 4, 6]
C. [1, 4, 9]
D. Error

Solution

  1. Step 1: Understand the loop operation

    The loop goes through each number in nums and appends its square to squares.
  2. Step 2: Calculate squares for each element

    1 squared is 1, 2 squared is 4, 3 squared is 9, so squares = [1, 4, 9].
  3. Final Answer:

    [1, 4, 9] -> Option C
  4. Quick Check:

    Squares of [1,2,3] = [1,4,9] [OK]
Hint: Loop appends squares, so output is squared list [OK]
Common Mistakes:
  • Confusing append with extend
  • Expecting original list instead of squares
  • Syntax errors in loop
4. Identify the error in this list comprehension:
result = [x*2 for x in range(5)
print(result)
medium
A. print statement is incorrect
B. Using wrong operator * instead of **
C. range(5) should be range[5]
D. Missing closing bracket "]" in list comprehension

Solution

  1. Step 1: Check list comprehension syntax

    The list comprehension is missing the closing square bracket "]" at the end.
  2. Step 2: Verify other parts

    Operator * is correct for multiplication, range(5) is correct, and print syntax is valid.
  3. Final Answer:

    Missing closing bracket "]" in list comprehension -> Option D
  4. Quick Check:

    Syntax error due to missing bracket [OK]
Hint: Always close brackets in comprehensions [OK]
Common Mistakes:
  • Forgetting closing bracket
  • Confusing parentheses and brackets
  • Misusing range syntax
5. You want to create a list of even numbers from 0 to 10 using list comprehension. Which code correctly does this?
hard
A. [x for x in range(11) if x % 2 == 0]
B. [x*2 for x in range(5)]
C. [x for x in range(10) if x % 2]
D. [x for x in range(11) if x / 2 == 0]

Solution

  1. Step 1: Understand the requirement

    We want even numbers from 0 to 10 inclusive, so numbers divisible by 2.
  2. Step 2: Analyze each option

    [x for x in range(11) if x % 2 == 0] uses correct range and condition (x % 2 == 0). [x*2 for x in range(5)] doubles numbers 0-4, giving [0,2,4,6,8]. [x for x in range(10) if x % 2] filters odd numbers (x % 2 is true for odd). [x for x in range(11) if x / 2 == 0] uses division instead of modulo, which is incorrect.
  3. Final Answer:

    [x for x in range(11) if x % 2 == 0] -> Option A
  4. Quick Check:

    Filter even numbers with modulo == 0 [OK]
Hint: Use modulo % 2 == 0 to filter even numbers [OK]
Common Mistakes:
  • Using multiplication instead of filtering
  • Using wrong condition for even check
  • Confusing division with modulo