List comprehensions are a feature of Python that can make your code more readable and less time-consuming. They are a tricky feature to get your head around, but once you do you'll find they can really come in handy.

In this blog post, we will explore the basics of list comprehensions and how to use them in Python.

 

Creating a list using a normal for-loop

fruit = "apples"
newlist = []

for char in fruit:
    newlist.append(char)
    
print(newlist)             #['a', 'p', 'p', 'l', 'e', 's']

This for-loop iterates over the characters in "apples" and creates a list, "newlist". But this is too much code for such a simple task, we can achieve this easily and concisely with list comprehensions.
 

Creating a list using a list comprehension

fruit = "apples"
newlist = [char for char in fruit]
           
print(newlist)    #['a', 'p', 'p', 'l', 'e', 's']

You can see that a list comprehension creates a list more easily and concisely than using only a for-loop.

 

Filtering a list

Suppose you have a list of fruits, and you want to create a new list containing only the fruits which have an 'e' in it:

 

Using a for loop only:

fruits = ["apple", "banana","date", "orange", "cherry", "kiwi", "mango"]
newlist = []

for f in fruits:
    if "e" in f:
        newlist.append(f)
        
print(newlist)        # ['apple', 'date', 'orange', 'cherry']

This can also be achieved in List comprehensions with the use of filters

Using list comprehensions:

You can easily create a new filtered list with list comprehensions using if/else statements. The above process of creating a new list with fruits having the letter 'e' can be simplified as

fruits = ["apple", "banana","date", "orange", "cherry", "kiwi", "mango"]

newlist = [f for f in fruits if "e" in f]
        
print(newlist)        # ['apple', 'date', 'orange', 'cherry']

 

If you want a list of fruits that have more than 5 letters:

newlist = [f for f in fruits if len(f) > 5]
print(newlist)        # ['banana', 'orange', 'cherry']

 

If you want a new list containing the fruits in uppercase:

newlist = [f.upper() for f in fruits]
print(newlist)        # ['APPLE', 'BANANA', 'DATE', 'ORANGE', 'CHERRY', 'KIWI', 'MANGO']

 

More Examples:

To create a new list containing the squares of numbers in another list:

nums = [2, 3, 1, 5, 6, 4, 12, 3]

squares = [i*i for i in nums]
print(squares)                # [4, 9, 1, 25, 36, 16, 144, 9]

 To generate a list containing the squares of even numbers in another list:

nums = [2, 3, 1, 5, 6, 4, 12, 3]

squares = [i*i for i in nums if i%2==0]
print(squares)                # [4, 36, 16, 144]

 

Using list comprehensions with functions

With list comprehensions, you can generate a list from the values returned from a function. Let's take a look at a function that takes in a person's name and returns it in uppercase with a greeting:

def greet(name):
    greeting = "Hello " + name.upper()
    return greeting

people = ["John", "Doe", "Prince", "Abdul", "Isaac"]

greet_everyone = [greet(p) for p in people]

print(greet_everyone)

output

['Hello JOHN', 'Hello DOE', 'Hello PRINCE', 'Hello ABDUL', 'Hello ISAAC']

 

List comprehensions can make your code efficient if you use them correctly.

Read More: 8 Excellent Python Courses on Udemy (2021)