# HG changeset patch # User Oleksandr Gavenko # Date 1456663839 -7200 # Node ID 3ce74b5f43c90eae0424199bf85b992d37d4fa9b # Parent eb1e2557ebf76a32a35b2fb51e696134a8598c56 List comprehension vs generator expression. diff -r eb1e2557ebf7 -r 3ce74b5f43c9 python-syntax.rst --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/python-syntax.rst Sun Feb 28 14:50:39 2016 +0200 @@ -0,0 +1,40 @@ + +=============== + Python syntax +=============== +.. contents:: + :local: + +List comprehension +================== + +List comprehension produce complete list with compact syntax:: + + [x**2 for x in xrange(1,10)] + [x+y for x in xrange(1,10) for y in xrange(1,10)] + [x-y for x in xrange(1,10) for y in xrange(1,10) if x>y] + + xlist = [x**2 for x in xrange(1,10)] + print xlist[0], xlist[2], xlist[-1] + print xlist[2:4] + print sum(xlist), sum(xlist) + +Generator expression +==================== + +Generator expression produce generator with compact syntax:: + + (x**2 for x in xrange(1,10)) + (x+y for x in xrange(1,10) for y in xrange(1,10)) + + print [x for x in (x**2 for x in xrange(1,10))] + + xgen = (x**2 for x in xrange(1,10)) + try: + xgen[0] + except TypeError: + print "'generator' object has no attribute '__getitem__'" + print sum(xlist), sum(xlist) + +Parentheses is required only if expression is ambiguous. +