10.23. List Comprehensions¶
The previous example creates a list from a sequence of values based on some selection criteria. An easy way to do this type of processing in Python is to use a list comprehension. List comprehensions are concise ways to create lists. The general syntax is:
[<expression> for <item> in <sequence> if <condition>]
where the if clause is optional. For example,
The expression describes each element of the list that is being built. The for
clause iterates through each item in a sequence. The items are filtered by the if
clause if there is one. In the example above, the for
statement lets item
take on all the values in the list mylist
. Each item is then squared before it is added to the list that is being built. The result is a list of squares of the values in mylist
.
To write the primes_upto
function we will use the is_prime
function to filter the sequence of integers coming from the range
function. In other words, for every integer from 2 up to but not including n
, if the integer is prime, keep it in the list.
def primes_upto(n):
""" Return a list of all prime numbers less than n using a list comprehension. """
result = [num for num in range(2,n) if is_prime(num)]
return result
Note
This workspace is provided for your convenience. You can use this activecode window to try out anything you like.
Before you keep reading...
Making great stuff takes time and $$. If you appreciate the book you are reading now and want to keep quality materials free for other students please consider a donation to Runestone Academy. We ask that you consider a $10 donation, but if you can give more thats great, if $10 is too much for your budget we would be happy with whatever you can afford as a show of support.
Check your understanding
- [4,2,8,6,5]
- Items from alist are doubled before being placed in blist.
- [8,4,16,12,10]
- Not all the items in alist are to be included in blist. Look at the if clause.
- 10
- The result needs to be a list.
- [10].
- Yes, 5 is the only odd number in alist. It is doubled before being placed in blist.
What is printed by the following statements?
alist = [4,2,8,6,5]
blist = [num*2 for num in alist if num%2==1]
print(blist)