10 Python Comprehension You should be using

Example 1: Creating a List with a Range

Traditional Way:

values = []
for x in range(10):
    values.append(x)
print(values)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Using List Comprehension:

values = [x for x in range(10)]
print(values)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Explanation: The comprehension provides a more concise way to create a list directly in a single line by iterating over a range.


Example 1.1: Incrementing Values

Traditional Way:

values = []
for x in range(10):
    values.append(x + 1)
print(values)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Using List Comprehension:

values = [x + 1 for x in range(10)]
print(values)
# [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Explanation: The comprehension allows the transformation of each element during iteration.


Example 2: Filtering Even Numbers

Traditional Way:

evens = []
for x in range(10):
    if x % 2 == 0:
        evens.append(x)
print(evens)
# [0, 2, 4, 6, 8]

Using List Comprehension:

evens = [x for x in range(10) if x % 2 == 0]
print(evens)
# [0, 2, 4, 6, 8]

Explanation: The comprehension includes a condition to filter elements directly.


Example 3: Filtering Strings with Conditions

Traditional Way:

options = ["any", "albany", "apple", "world", "hello", ""]
valid_strings = []
for option in options:
    if option.startswith('a') and option.endswith('y'):
        valid_strings.append(option)
print(valid_strings)
# ['any', 'albany']

Using List Comprehension:

valid_strings = [option for option in options if option.startswith('a') and option.endswith('y')]
print(valid_strings)
# ['any', 'albany']

Example 4: Flattening a Matrix

Traditional Way:

matrix = [[1,2,3], [4,5,6], [7,8,9]]
flattened = []
for row in matrix:
    for num in row:
        flattened.append(num)
print(flattened)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

Using List Comprehension:

flattened = [num for row in matrix for num in row]
print(flattened)
# [1, 2, 3, 4, 5, 6, 7, 8, 9]

Explanation: The comprehension allows a nested loop structure directly within a single line.


Example 5: Categorizing Numbers as Even or Odd

Traditional Way:

categories = []
for number in range(10):
    if number % 2 == 0:
        categories.append("Even")
    else:
        categories.append("Odd")
print(categories)
# ['Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd']

Using List Comprehension:

categories = ["Even" if number % 2 == 0 else "Odd" for number in range(10)]
print(categories)
# ['Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd', 'Even', 'Odd']

Explanation: The comprehension uses a conditional expression directly inside the list.


Example 6: Creating a Nested List (3D Matrix)

Traditional Way:

lst = []
for a in range(5):
    l1 = []
    for b in range(5):
        l2 = []
        for num in range(5):
            l2.append(num)
        l1.append(l2)
    lst.append(l1)
print(lst)

Using List Comprehension:

lst = [[[num for num in range(5)] for _ in range(5)] for _ in range(5)]
print(lst)

Explanation: The comprehension handles multiple nested loops elegantly with a compact structure.

Follow Up : Try creating a 2d matrix using the same technique


List Comprehension with a Function

def square(x):
    return x ** 2
squared_numbers = [square(x) for x in range(10)]
print(squared_numbers)

Dictionary Comprehension

pairs = [("a", 1), ("b", 2), ("c", 3)]
my_dict = {k: v for k, v in pairs}
print(my_dict)
# {'a': 1, 'b': 2, 'c': 3}

Set Comprehension

nums = [1, 2, 2, 3, 3, 3, 4, 4, 4]
unique_squares = {x * x for x in nums}
print(unique_squares)
# {16, 1, 4, 9}

Generator Comprehension

sum_of_squares = sum(x ** 2 for x in range(1000000))
print(sum_of_squares)

Explanation: Generator comprehensions are similar to list comprehensions but are more memory-efficient for large datasets.