[python] nechtene propojeni mnozin

MICHÁLEK Jan Mgr. Michalek.Jan na uhul.cz
Úterý Říjen 19 13:42:13 CEST 2010


Ha, to mne vede k jednomu problému, kterej jsem řešil

potřeboval jsem generátor, kterej by mě vracel postupně buňky pravidelné sítě (na pořadí mě nezáleží)

Itertools použít nemůžu, používám py 2.5

V tom generátoru můžu použít buď toto

[(a, b) for a in [1,2,3] for b in ['a','b']] #obslehnuto na http://stackoverflow.com/questions/533905/get-the-cartesian-product-of-a-series-of-lists-in-python

Tj něco jako 
def x():
 for i in [(a,b) for a in range(1,10,2) for b in range(5,20,5)]:
  yield i

Nebo dvě vnořené smyčky while
Asi tak

dex x():
  x = 2
  y = 4
  while x<=100:
    while y <= 20:
      yield [x,y]
      y = y +1
    y = 2
    x=x+3

A teď přijde ten dotaz, když použiju tu první metodu (podle mého elegantnějc vypadající) tak se mi ale to pole vytvoří naráz celý??? Nebo ne?? Já to tak totiž nechci, protože ta síť může bejt pěkně velká. Kdežto ta druhá (škaredší metoda) ukládá jen x a y. Vyházím z toho že rozestupy sou pravidelný a pracuju s celejma číslama.

Jde tedy to nějak vymyslet, abych udělal ten generátor, kterej si bude pamatovat jen aktuální hodnoty x a y, aniž bych musel použít smyčku?? Ta věc [něco for něco] (menuje se to generátor pole??) 

Musí to za každou cenu to pole hned vytvořit a celý ho uložit?? Nebo to jde nějak občůrat (například použít místo range() generátor)??

Já se přiznám, že nevim, jak tyhle věci fungujou, skoušel jsem tomu nacpat hodně velkou matici a porovnat rychlost, ale výsledek bych neoznačil za signifikantní.

Dík Je.
 

__________ Informace od ESET NOD32 Antivirus, verze databaze 5544 (20101019) __________

Tuto zpravu proveril ESET NOD32 Antivirus.

http://www.eset.cz
 


Další informace o konferenci Python