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

Odpovedet emailem