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.