Python Comprehensions

Β· 741 words Β· 4 minute read

test

Python comprehensions allow users to create new collections in a short concise way. In this article, I’ll illustrate comprehensions can make your code more readable and efficient , in addition to discussing the various types of comprehensions in Python.

Why Use Comprehensions? πŸ”—

Comprehensions are a beneficial feature in Python, offering multiple advantages that can significantly enhance your coding experience. Here are some key reasons to use comprehensions:

1. Conciseness πŸ”—

Comprehensions allow you to create new lists, dictionaries, sets, or generators with a single line of code. This conciseness makes your code more compact and reduces the amount of boilerplate code, leading to increased productivity.

2. Readability πŸ”—

One of Python’s main philosophies is readability. Comprehensions can make your code more readable by clearly expressing your intent in a way that’s easy to understand. This is particularly true for those familiar with the syntax.

3. Efficiency πŸ”—

Comprehensions can be more efficient than traditional loops because they are optimized in terms of execution. They reduce the overhead of function calls and can result in faster runtime, especially for large datasets. For example, creating a list of squares using comprehensions is typically faster than using a loop due to differences in how Python implements for loops and list comprehension.

⚠️ Given the above considerations, using comprehensions involves balancing readability, performance, and memory usage. For simple, straightforward, comprehensions are great, but for more complex scenarios, traditional loops or other methods might be more appropriate.

List Comprehension πŸ”—

Basic Syntax πŸ”—

new_list = [expression for item in iterable]

The Scenario πŸ”—

Suppose we want to create a list of squared numbers from 1 to 10.

Without List Comprehension πŸ”—

squared = []

for num in range(1, 11):
    squared_num = num**2
    squared.append(squared_num)

print(squared)
# Output 
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

With List Comprehension πŸ”—

squared = [num ** 2 for num in range(1,11)]
print(squared)
# Output
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

Conditionals πŸ”—

Suppose we want to make a list of numbers from 1 to 10 only if the numbers are even.

new_list = [expression for item in iterable if condition]
squared = [num ** 2 for  num in range(1,11) if num % 2 == 0]
print(squared)
# Output
[4, 16, 36, 64, 100]

Dictionary Comprehension πŸ”—

Basic Syntax πŸ”—

new_dict = {key_expression: value_expression for item in iterable}

The Scenario πŸ”—

Suppose you want to create a dictionary where the keys are numbers from 1 to 10 and the values are their cubes.

Without Dictionary Comprehension πŸ”—

cubes = {}
for x in range(1, 11):
    cubes[x] = x**3

print(cubes)
# Output
{1: 1, 2: 8, 3: 27, 4: 64, 5: 125, 6: 216, 7: 343, 8: 512, 9: 729, 10: 1000}

With Dictionary Comprehension πŸ”—

cubes = {x: x**3 for x in range(1, 11)}
print(cubes)
# Output
{1: 1, 2: 8, 3: 27, 4: 64, 5: 125, 6: 216, 7: 343, 8: 512, 9: 729, 10: 1000}

Conditionals πŸ”—

Again, we can add a conditional. Now lets create a dictionary numbers from 1 to 10 and the values are their cubes only if the keys are even numbers.

new_dict = {key_expression: value_expression for item in iterable if condition}
cubes = {x: x**3 for x in range(1, 11) if x % 2 == 0}
print(cubes)
# Output
{2: 8, 4: 64, 6: 216, 8: 512, 10: 1000}

Set Comprehension πŸ”—

We create set comprehensions the same as lists, but instead of using parenthesis, we use brackets.

Basic Syntax πŸ”—

new_set = {expression for item in iterable}

The Scenario πŸ”—

Suppose you want to create a set of squared values from 1 to 10.

Without Set Comprehension πŸ”—

squared_set = set() 
for x in range(1, 11):
    squared_set.add(x**2)  

print(squared_set)
# Output 
{64, 1, 4, 36, 9, 16, 49, 81, 25}

With Set Comprehension πŸ”—

squared_set = {x**2 for x in range(1, 11)}
print(squared_set)
# Output 
{64, 1, 4, 36, 9, 16, 49, 81, 25}

Conditionals πŸ”—

new_set = {expression for item in iterable if condition}
squared_set = {x**2 for x in range(1, 11) if x%2==0}
print(squared_set)
# Output
{64, 100, 4, 36, 16}

Conclusion πŸ”—

Comprehensions are a powerful feature in Python that allow for writing cleaner, more readable, and efficient code. They provide a concise way to create new collections from existing iterables, encapsulating operations in a single, elegant line of code. Embracing comprehensions is a step towards writing more Pythonic code, aligning with Python’s philosophy of simplicity and readability.

Thanks for reading! If you found this post helpful, please share it with someone who might benefit from it.

comments powered by Disqus