Reading List Comprehension?
Remco Gerlich
scarblac-spamtrap at pino.selwerd.nl
Thu Sep 7 04:53:54 EDT 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