Tagged: list comprehension
List Comprehension in Python
I stumbled across this nice tutorial on advanced design patterns in python today, and especially liked the following image that explains graphically what list comprehension is:
List comprehension in python is extremely flexible and powerful. Let us practice some more with further neat examples of it:
Square all non-negative numbers smaller than 10
[x**2 for x in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
Non-negative multiples of 5 smaller than 100
[x for x in range(100) if x%5 == 0]
[0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95]
Non-negative multiples of 3 but not multiples of 6 smaller than 50
[x for x in range(50) if x%3 == 0 and x%6 != 0]
[3, 9, 15, 21, 27, 33, 39, 45]
All consonants in a given sentence (without repetition)
import string punct = string.punctuation + ' ' vowels = "aeiou" phrase = "On second thought, let's not go to Camelot. It is a silly place." set([c for c in phrase.lower() if c not in vowels and c not in punct])
{'c', 'd', 'g', 'h', 'l', 'm', 'n', 'p', 's', 't', 'y'}
First character of every word in a sentence
[w[0] for w in phrase.split()]
['O', 's', 't', 'l', 'n', 'g', 't', 'C', 'I', 'i', 'a', 's', 'p']
Substitute all vowels in a sentence by the character ‘0’
"".join([c if c not in vowels else '0' for c in phrase])
"On s0c0nd th00ght, l0t's n0t g0 t0 C0m0l0t. It 0s 0 s0lly pl0c0."
Pairs of elements drawn from different lists
words1 = ['Lancelot', 'Robin', 'Galahad'] words2 = ['Camelot', 'Assyria'] [(w1,w2) for w1 in words1 for w2 in words2]
[('Lancelot', 'Camelot'), ('Lancelot', 'Assyria'), ('Robin', 'Camelot'), ('Robin', 'Assyria'), ('Galahad', 'Camelot'), ('Galahad', 'Assyria')]
I will update this list as more interesting and useful examples come to mind. What’s your favorite use of list comprehension and how many lines of code did it save you?