Reading List Comprehension?

Remco Gerlich scarblac-spamtrap at pino.selwerd.nl
Thu Sep 7 10:53:54 CEST 2000


Stephen Hansen wrote in comp.lang.python:
> But..list comprehensions.. I can't quite fathom.
> 
> --> x for subseq in seq for x in subseq
>  
> Eh?!?! That looks so..wrong. No whitespace, parens, no nothing, with
> all those keywords mixed in there. I can't pronounce it, or make any
> sense outat it. Maybe that's because the examples insisted upon using
> exponential syntax, instead of something simple like addition. :)

This one is a bit weird, flattening a list. It makes a list of all the
elements inside a list of lists.

l = [x for subseq in seq for x in subseq]

is equivalent to

l = []
for subseq in seq:
   for element in subseq:
      l.append(element)
 
> I don't know -- is there a more in depth, vastly basic, tutorial to
> what the heck these things are somewhere? It looks..so..well,
> not-at-all-like-Python.

I'm also still uncomfortable with those "double" comprehension (from a list
of lists). Somehow I feel that those two for clauses should have been the
other way around.

I hope I will be able to use the simpler comprehension in place of most
lambda/map combinations:

Irritating constructs like
L = map(lambda x: expression, X)

become
L = [expression for x in X]

And: you don't get the namespace problems that the lambda has!!
(No arg=arg,l=l, etc like you sometimes need in lambdas).

def print_power():
   "Ask the user for an integer (n) and print 0^n, 1^n, ..., 10^n"
   power = input("Which power to print?")
   print map(lambda x,power=power: x**power, range(11))
   
   print [x**power for x in range(11)] 
   
I think the new notation is both shorter and easier to read. I don't
think I will be using the syntax with multiple fors a lot.
 
-- 
Remco Gerlich,  scarblac at pino.selwerd.nl

   This is no way to be
     Man ought to be free      -- Ted Bundy
       That man should be me



More information about the Python-list mailing list