Python – Problem in understanding Python list comprehensions

list-comprehensionpython

What does the last line mean in the following code?

import pickle, urllib                                                                                                                                                     

  handle = urllib.urlopen("http://www.pythonchallenge.com/pc/def/banner.p")
  data = pickle.load(handle)
  handle.close()

  for elt in data:
         print "".join([e[1] * e[0] for e in elt])

My attempt to the problem:

  • "".join… uses join -method to empty text
  • e[1] * e[0] multiplies two subsequent values in the sequence, e
  • I am not sure what is e
  • I am not sure, what it means, when you have something before for -loop, like: e[1] * e[0] for e in elt

Best Solution

Maybe best explained with an example:

print "".join([e[1] * e[0] for e in elt])

is the short form of

x = []
for e in elt:
  x.append(e[1] * e[0])
print "".join(x)

List comprehensions are simply syntactic sugar for for loops, which make an expression out of a sequence of statements.

elt can be an arbitrary object, since you load it from pickles, and e likewise. The usage suggests that is it a sequence type, but it could just be anything that implements the sequence protocol.