Your Page Title
🔍

    Python List Comprehension

    List comprehension is Python’s syntax to concisely create lists. The general syntax allows creating a new list by evaluating an expression on each element within the iterable and possibly further restricting the elements based on certain conditions.

    Basic Syntax:

    new_list = [expression for item in iterable if condition]
    • expression: the transformation or operation to be carried out on each element.
    • item: The iteration variable representing each element in the iterable.
    • iterable: the sequence of items being processed; e.g., a list, range, etc.
    • Condition: An optional filter that specifies whether an item should be included.

    Examples:

    1. Create a List from a Range:

    squares = [x**2 for x in range(10)]
    print(squares) # Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    • Explanation: For each x in the range from 0 to 9, calculate x**2 and add it to the list.

    2. Filter Items:

    even_numbers = [x for x in range(10) if x % 2 == 0]
    print(even_numbers) # Output: [0, 2, 4, 6, 8]
    • Explanation: Include only numbers that are divisible by 2.

    3. Transform and Filter:

    odd_squares = [x**2 for x in range(10) if x % 2 != 0]
    print(odd_squares) # Output: [1, 9, 25, 49, 81]
    • Explanation: Square only the odd numbers in the range.

    4. Nested Loops:

    pairs = [(x, y) for x in range(3) for y in range(3)]
    print(pairs) # Output: [(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
    • Explanation: Combine every x in range(3) with every y in range(3).

    5. Flatten a Nested List:

    matrix = [[1, 2], [3, 4], [5, 6]]
    flattened = [num for row in matrix for num in row]
    print(flattened) # Output: [1, 2, 3, 4, 5, 6]
    • Explanation: Loop through each row in the matrix, then loop through each num in the row.

    6. List Comprehension with Functions:

    def square(x):
        return x**2
    
    results = [square(x) for x in range(5)]
    print(results)  # Output: [0, 1, 4, 9, 16]
    • Explanation: Apply the square function to each number in the range.

    Comparison with a For Loop:

    Using list comprehension is often more concise than a traditional for loop.

    Using a For Loop:

    squares = []
    for x in range(10):
        squares.append(x**2)
    print(squares)  # Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
    

    Using List Comprehension:

    squares = [x**2 for x in range(10)]
    print(squares) # Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

    Advanced Usage:

    1. Conditional Expression in expression:

    results = ["Even" if x % 2 == 0 else "Odd" for x in range(5)]
    print(results)  # Output: ['Even', 'Odd', 'Even', 'Odd', 'Even']
    

    Explanation: Include conditional logic directly in the expression.

    2. Set and Dictionary Comprehension:

    • Set Comprehension:
    unique_squares = {x**2 for x in range(5)}
    print(unique_squares) # Output: {0, 1, 4, 9, 16}
    • Dictionary Comprehension:
    square_dict = {x: x**2 for x in range(5)}
    print(square_dict) # Output: {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}

    Advantages of List Comprehension:

    1. Conciseness: The code is shorter and more readable.
    2. Performance: Usually, it runs faster than the equivalent for loops, due to Python’s specific implementation.
    3. Readability: Clear intent to generate or transform lists.

    When Not to Use:

    • If the logic is too complex, a traditional loop with comments might be more readable.
    • Avoid using list comprehensions for side effects (such as printing or modifying external variables).