Skip to main content

7.0 Python: List Comprehension

7.1 List Comprehension

List comprehension offers a shorter syntax when you want to create a new list based on the values of an existing list.

Example:

Based on a list of fruits, you want a new list, containing only the fruits with the letter "a" in the name.

Without list comprehension you will have to write a for statement with a conditional test inside:

7.1.1 Example

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

for x in fruits:
if "a" in x:
newlist.append(x)

print(newlist)
tip

With list comprehension you can do all that with only one line of code:

7.1.2 Example

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

newlist = [x for x in fruits if "a" in x]

print(newlist)

7.2 The Syntax

newlist = [expression for item in iterable if condition == True]

The return value is a new list, leaving the old list unchanged.

7.2.1 Condition

The condition is like a filter that only accepts the items that evaluate to True.

7.2.2 Example

Only accept items that are not "apple":

newlist = [x for x in fruits if x != "apple"]

The condition if x != "apple" will return True for all elements other than "apple", making the new list contain all fruits except "apple".

The condition is optional and can be omitted:

7.2.3 Example

With no if statement:

newlist = [x for x in fruits]

7.2.4 Iterable

The iterable can be any iterable object, like a list, tuple, set etc.

7.2.5 Example

You can use the range() function to create an iterable:

newlist = [x for x in range(10)]

Same example, but with a condition:

7.2.6 Example

Accept only numbers lower than 5:

newlist = [x for x in range(10) if x < 5]

7.2.7 Expression

The expression is the current item in the iteration, but it is also the outcome, which you can manipulate before it ends up like a list item in the new list:

7.2.8 Example

Set the values in the new list to upper case:

newlist = [x.upper() for x in fruits]

You can set the outcome to whatever you like:

7.2.9 Example

Set all values in the new list to 'hello':

newlist = ['hello' for x in fruits]

The expression can also contain conditions, not like a filter, but as a way to manipulate the outcome:

7.2.10 Example

Return "orange" instead of "banana":

newlist = [x if x != "banana" else "orange" for x in fruits]

The expression in the example above says:

"Return the item if it is not banana, if it is banana return orange".