Hm, vidím X a Y, tdy někdo poměrně přesně odhadl, na co to potřebuju.
Je. -----Original Message----- From: python-boun...@py.cz [mailto:python-boun...@py.cz] On Behalf Of Petr Přikryl Sent: Wednesday, October 20, 2010 9:19 AM To: Konference PyCZ Subject: [python] Generator prvku ridke matice (bylo ... nechtene propojenimnozin) Pro Python 2.x by se to dalo ještě upravit (viz dole). "Jirka Vejrazka" napsal > > for i in [(a,b) for a in range(1,10,2) for b in range(5,20,5)]: > > Kdyz tady pouzijes na krajich kulate zavorky misto hranatych, tak se > to > nevyrobi cele v pameti, ale vznikne generator, ktery se pak da > pouzit > uplne stejne pro "for" cyklus: > > Python 2.4.4 (#71, Oct 18 2006, 08:34:43) [MSC v.1310 32 bit (Intel)] on > win32 > Type "help", "copyright", "credits" or "license" for more > information. > | >>> x = [(a,b) for a in range(1,10,2) for b in range(5,20,5)] | >>> x | [(1, 5), (1, 10), (1, 15), (3, 5), (3, 10), (3, 15), (5, 5), (5, 10), (5, 15), | | >>> x = ((a,b) for a in range(1,10,2) for b in range(5,20,5)) | >>> x | a.py ====================================================== g = ((a,b) for a in xrange(1,10,2) for b in xrange(5,20,5)) def genFunc(x, y): for a in xrange(1, x, 2): for b in xrange(5, y, 5): yield (a, b) for t in g: print t, print print '-' * 60 for t in genFunc(10, 20): print t, ====================================================== Místo range() použij xrange() -- i když tady ta úspora je maličká (jen z principu). To je ten generátor přiřazený do g -- jak ukazoval Jirka. Generátorová funkce genFunc vrátí stejný generátor. Je to jiné jen syntakticky. Tady jsou navíc doplněny jen parametry, aby se to dalo použít pro různé hodnoty x a y a nemuselo se to furt opisovat. Zavoláním genFunc vznikne podobný generátor, jako g. U mě to zobrazí následující: ====================================================== C:tmp>python a.py (1, 5) (1, 10) (1, 15) (3, 5) (3, 10) (3, 15) (5, 5) (5, 10) (5, 15) (7, 5) (7, 10) (7, 15) (9, 5) (9, 10) (9, 15) ------------------------------------------------------------ (1, 5) (1, 10) (1, 15) (3, 5) (3, 10) (3, 15) (5, 5) (5, 10) (5, 15) (7, 5) (7, 10) (7, 15) (9, 5) (9, 10) (9, 15) ====================================================== Petr _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python __________ Informace od ESET NOD32 Antivirus, verze databaze 5546 (20101019) __________ Tuto zpravu proveril ESET NOD32 Antivirus. http://www.eset.cz _______________________________________________ Python mailing list Python@py.cz http://www.py.cz/mailman/listinfo/python