Jignesh Sutar wrote: > Is it possible to get two nested for statements followed by a nested > if/else statement all into a single list comprehension ie. the equivalent > of the below: > > > for i in xrange(1,20): > for j in xrange(1,10): > if j<6: > j=int("8"+str(j)) > else: > j=int("9"+str(j)) > print "%(i)02d_%(j)02d" % locals()
> Many thanks in advance. Need I say that it is a bad idea to build overly complex list comprehensions? Under that proviso: The first step is always to ensure that there is a single expression in the inner loop. I'm keeping as similar as possible to your loops: for i in xrange(1, 20): for j in xrange(1, 10): print "%02d_%02d" % (i, int(("8" if j < 6 else "9") + str(j))) Now the translation is mechanical for x in a: for y in b: expr becomes [expr for x in a for y in b] or (using a genexp rather than a listcomp as you are going to print it anyway) print "\n".join( "%02d_%02d" % (i, int(("8" if j < 6 else "9") + str(j))) for i in xrange(1, 20) for j in xrange(1, 10)) But again: don't do that ;) By the way, using locals() is another bad idea, plus it does not capture the loop vars of genexps (all pythons) and listcomps (python3). PS: a simple alternative: print "\n".join( "%02d_%02d" % (i, k) for i in range(1, 20) for k in range(81, 86) + range(96, 100)) _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor