> > JInak, proc pouzivate for i in range(len(a)): ? Uz jsem si toho > > vsimnul driv, u jinych prispevku. Preci, kdyz chci iterovat pres > > prvky, tak musi staci for item in a: > > 1) Zvyk z jiných jazyků.
Ano, to mi prislo jako nejpadnejsi duvod. Cloveka to tihne delat veci, jak je zvykly :) Nic ve zlem, ja si taky v sobe taham vzory z 6502 assembleru. > > 2) Protože taková iterace je read only. Já můžu dát for item in a, ale > už nezměním ten konkrétní prvek přímo v poli. Třeba jako v tomto případě > výsledné pole má stejný počet prvků, jen tuple se má změnit na seznam. > Vycházím z toho (možná mylně), že cokoli jiného, než iterace přes indexy > lze zařídit jedině tak, že budu mít v paměti dvě pole, první budu číst > iterací, do druhé budu vytvářet výsledek. Zatímco při iteraci přes > indexy mám jen jedno pole, nad kterým se čte i zapisuje - je to paměťově > efektivnější. > > Existuje možnost jak to udělat bez indexování a bez toho, aby v paměti > byly dočasně dvě pole? Zalezi na tom, co optimalizujete. Ja posledni dobou radeji preferuji "optimalizaci" citelnosti kodu a az v pripade potreby optimalizaci naroku na pamet, nebo rychlost. Ve Vasem priklade si myslim, ze dany objekt z pole nezmenite na typ list, ale ze vlastne vytvorite novy, pricemz stary zustane v pameti, dokud ho garbage collector nezahodi. A to postupne pro vsechny prvky pole. Akorat to bude pomalejsi a mene citelne. Pouziti built-in funkce map je pry rychlejsi - zajimava rozprava o optimalizaci je tady: http://www.python.org/doc/essays/list2str.html No, v kazdem pripade ta otazka je na miste treba pro nejake pole integeru, nad kterym se dela operace, jejiz vysledek je zase integer o stejne byte velikosti (treba deleni dvema?). A samozrejme neco jineho je, pokud ten index iterace potrebujeme (napr. pro print). Radek _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
