> 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:
Protože: 1) Zvyk z jiných jazyků. 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ší. > Indexace je zvyk z C, PHP, Pascalu apod., kde to byla nutnost. V PHP existuje stejná iterace, dokonce si tam můžete udělat i vlastní iterátor, čehož jsem hojně využíval ve svých třídách a objektech. Ale v PHP je iterátor dvojí, jeden read only jako v Pythonu a druhý s možností změnit prvek pole, a ten mi v Pythonu chybí (a nebo o něm nevím): Následující kód v PHP docela elegantně iterací přičte ke každému prvku pole trojku, aniž by se musela vytvářet kopie pole: $a = array(1,2,3,4,5); foreach ($a as &$value) $value += 3; V C++ také existuje iterace, dokonce s možností projet jen část prvků daných iterátorem: std::for_each(objekt.begin(), objekt.end(), do_for_every_item); Ing. Miloslav Ponkrác _______________________________________________ Python mailing list [email protected] http://www.py.cz/mailman/listinfo/python
