0% found this document useful (0 votes)
69 views14 pages

22 List Comprehensions

This document discusses list comprehensions in Python. It begins by showing how to explicitly write a list, write a loop to create a list, and write a list comprehension. It then provides examples of list comprehensions to generate lists of squares, convert temperatures, prepare names for alphabetization, find similar gene sequences, and more. The document explains the syntax and semantics of list comprehensions and different types of comprehensions like lists, sets, and dictionaries.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
69 views14 pages

22 List Comprehensions

This document discusses list comprehensions in Python. It begins by showing how to explicitly write a list, write a loop to create a list, and write a list comprehension. It then provides examples of list comprehensions to generate lists of squares, convert temperatures, prepare names for alphabetization, find similar gene sequences, and more. The document explains the syntax and semantics of list comprehensions and different types of comprehensions like lists, sets, and dictionaries.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 14

List comprehensions

UW CSE 140
Winter 2014

1
Ways to express a list
1. Explicitly write the whole thing:
squares = [0, 1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

2. Write a loop to create it:


squares = []
for i in range(11):
squares.append(i*i)

3. Write a list comprehension:


squares = [i*i for i in range(11)]
A list comprehension is a concise description of a list
A list comprehension is shorthand for a loop

2
Mathematical notation
Let I be the integers
• { x : x I and x = x2 } is the set { 0, 1 }
• { x : x I and x > 0 } is the set of all positive
integers
• { x2 : x I and 0 ≤ x < 10 and prime(x) }
expression variable domain condition

Python notation:
• { x*x for x in range(10) if prime(x) }
expression variable domain condition 3
Two ways to convert Centigrade to
Fahrenheit
ctemps = [17.1, 22.3, 18.4, 19.1]

With a loop:
ftemps = []
for c in ctemps:
f = celsius_to_farenheit(c)
ftemps.append(f)

With a list comprehension:

ftemps = [celsius_to_farenheit(c) for c in ctemps]

The comprehension is usually shorter, more readable, and more efficient

4
Syntax of a comprehension
[(x,y) for x in org1 for y in org2 if sim(x,y) > threshold]

expres- for clause (required) zero or more zero or more if clauses


sion assigns value to the additional
variable x for clauses

something
that can be
iterated

5
Semantics of a comprehension
[(x,y) for x in org1 for y in org2 if sim(x,y) > threshold]

result = []
for x in org1:
for y in org2:
if sim(x,y) > threshold:
result.append( (x,y) )
… use result …

6
Types of comprehension
List
[ i*2 for i in range(3) ]
Set
{ i*2 for i in range(3)}
Dictionary
d = {key: value for item in sequence …}
{ i: i*2 for i in range(3)}

7
Preparing names for alphabetization
Goal: convert “firstname lastname” to “lastname, firstname”
names = ["Isaac Newton", "Albert Einstein", "Niels Bohr", "Marie Curie",
"Charles Darwin", "Louis Pasteur", "Galileo Galilei", "Margaret Mead"]

With a loop:
result = []
for name in names:
split_name = name.split(" ")
last_name_first = split_name[1] + ", " + split_name[0]
result.append(last_name_first)

With a list comprehension:


split_names = [name.split(" ") for name in names]
last_names_first = [sn[1] + ", " + sn[0] for sn in split_names]
# Bonus: last_names = [split_name[1] for split_name in split_names]

Another idea: write a function,


then use the function in a comprehension

8
Cubes of the first 10 natural numbers
Goal:
Produce: [0, 1, 8, 27, 64, 125, 216, 343, 512, 729]

With a loop:
cubes = []
for x in range(10):
cubes.append(x**3)

With a list comprehension:


cubes = [x**3 for x in range(10)]

9
Powers of 2, 20 through 210
Goal: [1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024]

[2**i for i in range(11)]

10
Even elements of a list
Goal: Given an input list nums, produce a list of
the even numbers in nums

nums = [3, 1, 4, 1, 5, 9, 2, 6, 5]
 [4, 2, 6]

[num for num in nums if num % 2 == 0]

11
Gene sequence similarity
Goal: Find all similar pairs of genome sequences (one
sequence from org1, one from org2)
org1 = ["ACGTTTCA", "AGGCCTTA", "AAAACCTG"]
org2 = ["AGCTTTGA", "GCCGGAAT", "GCTACTGA"]
“Similar” means: similarity(seq1, seq2) > threshold
def similarity(sequence1, sequence2)
"""Return a number representing the
similarity score between the two arguments""“
...

[(s1,s2) for s1 in org1 for s2 in org2


if similarity(s1,s2) > threshold]

12
All above-average 2-die rolls
Result list should be a list of 2-tuples:
[(2, 6), (3, 5), (3, 6), (4, 4), (4, 5), (4, 6), (5, 3), (5, 4),
(5, 5), (5, 6), (6, 2), (6, 3), (6, 4), (6, 5), (6, 6)]

[(r1, r2) for r1 in [1,2,3,4,5,6]


for r2 in [1,2,3,4,5,6]
if r1 + r2 > 7]
OR
[(r1, r2) for r1 in range(1, 7)
for r2 in range(8-r1, 7)]

13
Get more practice
• Use comprehensions where appropriate
• Convert loops to comprehensions
• Convert comprehensions to loops

14

You might also like