[python] vnitřní implementace python listu
superman
feed na centrum.cz
Pondělí Leden 8 13:53:02 CET 2007
> OK, asi jsem ovlivněn C++ terminologií z STL. Tam je list struktura,
> která umožňuje rychlé vkládání a přidávání prvků a jako doplněk má možnost
> adresace indexem.
> Jako pole mi přijde spíš tuple.
Jenže Python je takové zmatení jazyků. Cyklus for v Pythonu je cyklus
foreach, list je vlastně pole, atd..
> Aby vkládání do prostředka seznamu nebylo pomalé (nemusely se přesouvat
> velké bloky dat)
> asi bych to řešil jako seznam nebo strom polí. V případě potřeby vkládání
> doprostřed
> pole se pole rozpadne na dvě části. Naopak při velké fragmentaci se spustí
> defragmentační proces, který malá sousedící pole sloučí.
Vzhledem k tomu, že to pole udržuje jenom pointery na prvky, tak je i
vkládání do pole extrémně rychlé. Rozhodně je to rychlejší operace, než
udržování x fragmentovaných bloků a udržovat operace nad nimi.
Ono jde o to, že si můžete vybrat - některé operace pomalejší a některé
rychlejší. Souvislý seznam má extrémně rychlé append, přístup přes
indexy, čtení a zápis prvku. Zase pomalejší vkládání doprostřed seznamu.
Pokud by pole bylo na více bloků, pak je pomalý přístup přes indexy,
pomalý zápis, pomalé čtení, rychlé vkládání doprostřed seznamu.
Vzhledme k frekvenci operací bych asi dal přednost prvnímu.
> byla řeč o enumeraci (přístup k následujícímu prvku)
oproti indexaci
> V mých progremech se indexu vyhýbám mj. proto, že se mi nelíbí.
> V C a C++ raději pro iterace seznamů používám iterátory nebo ukazatelovou
> aritmetiku
> přijde mi to čitelnější i když se často fakticky jedná o totéž.
Iterátory v C++ je něco jiného, než v Pythonu. Iterátor je prostě objekt
s nejrychlejším možným přístupem, často je to jenom pointer, ale díky
šablonám to může být naprosto cokoli a dá se dosáhnout nejvyšší efektivita.
Ing. Miloslav Ponkrác
Další informace o konferenci Python