Note: Lines beginning with "
Python supports a concept called "list comprehensions". It can be used to construct lists in a very natural, easy way, like a mathematician is used to do.
The following are common ways to describe lists (or sets, or tuples, or vectors) in mathematics.
You probably know things like the above from mathematics lessons at school. In Python, you can write these expression almost exactly like a mathematician would do, without having to remember any special cryptic syntax.
This is how you do the above in Python:
I'm sure you want to see a more complicated example. :-) The following is yet another way to compute prime numbers. The interesting thing is that we first build a list of non-prime numbers, using a single list comprehension, then use another list comprehension to get the "inverse" of the list, which are prime numbers.
NB: You can nest list comprehensions inside of each other,
so you could write the above example with a single
statement (without the need for the temporary variable
noprimes"). However, such lines tend to get
long and less readable, so this is not recommended.
Of course, list comprehensions don't only work for numbers. Lists can contain any type of elements, including strings, nested lists and functions. You can even mix different types within a list.
The following works on a list of strings and produces a list of lists. Each of the sublists contains two strings and an integer.
The above example also demonstrates that you can do exactly
the same thing with
map() and a lambda function.
However, there are cases when you cannot
map() and have to use a list comprehension
instead, or vice versa. When you can use both, then it
is often preferable to use a list comprehension,
because this is more efficient and easier to read,
most of the time.
You cannot use list comprehensions when the construction
rule is too complicated to be expressed with "for" and "if"
statements, or if the construction rule can change dynamically
at runtime. In this case, you better
map() and / or
filter() with an
Of course, you can combine that with list comprehensions.