Mahadevan, Anand wrote: > I'm playing around with list comprehension and in IDLE typed this in. I > actually wanted it to return all tuples satisfying the condition where z > is the sum of x and y. I kind of got mixed up with the syntax, hence I put > a comma in there instead of an "if". I'd like some assistance > understanding what it's doing... Thanks! > >>>> somelist = [(x,y,z) for x in range(1,10) for y in range(x,10) for z in >>>> range(y,10), x+y==z] somelist
If you're puzzled about a list comprehension, try translating it into for loops: somelist = [] for x in range(1, 10): for y in range(x, 10): for z in range(y, 10), x+y==z: somelist.append((x, y, z)) In the first iteration you get x=1, y=1, so let's see what the inner loop gives: >>> x = y = 1 >>> for z in range(y, 10), x+y==z: ... print z ... Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'z' is not defined So if you don't get a NameError you have defined z before entering the inner "loop". Let's fix that: >>> z = 42 >>> for z in range(y, 10), x+y==z: ... print z ... [1, 2, 3, 4, 5, 6, 7, 8, 9] False It should be obvious now that Python interprets range(y, 10), x+y==z as a tuple and iterates over that. range(1, 10) is a list in Python 2, so you are getting that first, then follows a boolean expression x+y == z which gives either True or False. _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: http://mail.python.org/mailman/listinfo/tutor