List comprehensions#

List comprehensions are ‘shortcuts’ in creating lists using loops within one statement. The main advantage is that they are shorter to write. The syntax is:

    some_list = [expression for item in iterable_object if condition]


This will generate a list with an expression based on items in ‘iterable_object’, if the condition is met. The if condition is optional.

# List comprehensions

normal_numbers = [number for number in range(1, 20, 3)]
print(normal_numbers)

cubic_numbers = [number**3 for number in range(1, 20, 3)]
print(cubic_numbers)

# These are equivalent to

normal_numbers = []
cubic_numbers = []

for number in range(1, 20, 3):
normal_numbers.append(number)
cubic_numbers.append(number**3)

print(normal_numbers)
print(cubic_numbers)

[1, 4, 7, 10, 13, 16, 19]
[1, 64, 343, 1000, 2197, 4096, 6859]
[1, 4, 7, 10, 13, 16, 19]
[1, 64, 343, 1000, 2197, 4096, 6859]


The expression in list comprehension can be anything, the same value for each item, a string…:

zeros_list = [ 0 for i in range(5)]
text_list = ["text" for i in range(5)]

print(zeros_list)
print(text_list)

[0, 0, 0, 0, 0]
['text', 'text', 'text', 'text', 'text']


Using if condition:

# List comprehension with if statement
# number%2 == 1 means to search for numbers whose
# remainder from division by 2 is 1 (odd numbers)

odd_numbers = [ number for number in range(20) if number%2 == 1]
print(odd_numbers)

# Equivalent to

odd_numbers = []
for number in range(20):
if number%2 == 1:
odd_numbers.append(number)

print(odd_numbers)

[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]


Exercises:#

• Create a list comprehension to find Celsius temperatures for Fahrenheit temperatures between $$20^\circ$$F and $$80^\circ$$F at $$5^\circ$$F increments. The Fahrenheit-Celsius conversion formula is:

$T_{Celsius} = \frac{5}{9}*(T_{Fahrenheit}-32).$

• Create a list of powers of two $$2^x$$ where $$x$$ is positive, odd, not divisible by 3 and smaller than 40. Iterate through that list and print the last integer of each element. Numbers tend to show up patterns in such analysis, can you spot one?