Re: list displays
 From: Steven D'Aprano <steve+comp.lang.python@xxxxxxxxxxxxx>
 Date: 08 Jan 2011 22:41:41 GMT
On Sat, 08 Jan 2011 22:57:45 +0100, Olive wrote:
I am a newbie to python. Python supports what I thinks it is called list
display, for example:
[i for i in range(10)]
[i for i in range(10) if i<6]
This is called a list comprehension, not list display.
Does anyone know a good documentation for this. I have read the language
reference but it is confusing.
A list comprehension is syntactic sugar for a for loop. If you start with
code looking like this:
storage = []
for i in range(10):
if i < 6:
storage.append(i)
you can rewrite this as a list comprehension:
storage = [i for i in range(10) if i < 6]
The source doesn't have to be range, it can be any sequence or iterator:
lengths = [len(obj) for obj in my_list_of_objects]
# like map(len, my_list_of_objects)
If you are mathematically inclined, you might also like this analogy: the
syntax for a list comprehension is similar to that of sets in mathematics.
[f(x) for x in D]
is similar to:
{ f(x) ∀ x ∈ D }
("the set of f(x) for all x element of D")
Don't waste your time with list comprehensions that just walk over the
source, doing nothing. For example:
[i for i in range(10)]
Just use list(range(10)) instead.
Where list comps get complicated is when you combine them. Nested list
comps are not too bad, although they can get messy:
[len(s) for s in [str(x) for x in [2**n for n in range(10)]]]
That's the same as:
powers_of_two = [2**n for n in range(10)]
strings = [str(x) for x in powers_of_two]
lengths = [len(s) for s in strings]
But what do you make of this?
[a*b for a in range(3) for b in range(4)]
This is like a nested forloop:
results = []
for a in range(3):
for b in range(4):
results.append(a*b)
Hope this helps.

Steven
.
 References:
 list displays
 From: Olive
 list displays
 Prev by Date: Re: list displays
 Next by Date: Re: Absolute imports?
 Previous by thread: Re: list displays
 Next by thread: PyCon 2011  Full talk and tutorial list now available, registration open!
 Index(es):
Relevant Pages
