Python - Seznamy, n-tice, slovníky, řetězce a iterátory

Z GeoWikiCZ

Součástí jazyka Python jsou kontejnery, které slouží pro ukládání různých objektů. S kontejnery úzce souvisí objekty, kterým říkáme iterátory. Standardní kontejnery Pythonu jsou seznamy (lists), n-tice (tuples), slovníky (dictionaries) a řetězce (strings).

Seznamy a n-tice

Jednoduchý seznam v Pythonu vytvoříme například takto

ptaci = [ "sokol", "krahujec", "koroptev", "lelek" ]

počet prvků seznamu určuje funkce len(), k jednotlivým prvkům seznamu můžeme přistupovat přes indexy; indexem prvního prvku je 0, poslední prvek z našeho příkladu má index 3, resp. len(ptaci)-1. Cyklus

for i in range(len(ptaci)):
   print ptaci[i]

vytiskne všechny ptáky z naše seznamu.

Jistou zvláštností Pythonu je, že povoluje i záporné indexy, kde ptaci[-1] je poslední prvek seznamu, v nešem případě tedy "lelek". Záporný index -n je v neprázdném seznamu definován jako výraz seznam[len(seznam)-n].

Kromě jednotlivých prvků seznamu, můžeme indexovat i výřezy (slicing), například výraz ptaci[1:3] označuje podseznam ["krahujec", "koroptev"]. Výřezy fungují i pro záporné indexy. Indexy na začátek, resp. konec seznamu lze vynechat a můžeme proto psát ptaci[:3] pro výřez ["sokol", "krahujec", "koroptev"], resp. ptaci[2:] pro výřez ["koroptev", "lelek"]. Vynecháním obou indexů ptaci[:] získáme výraz, který označuje celý seznam.

Hodnoty prvků seznamu můžeme měnit přiřazením, například

ptaci[2] = "vrabec"

seznamy můžeme rozšiřovat anebo rušit jejich prvky. Jazyk Python kromě seznamů poskytují i tzv. n-tice (tuples), které se od seznamů liší tím, že nemohou být po vytvoření měněny. N-tice vytváříme jako seznamy uzavřené do oblých závorek

tyden = ("pondeli", "utery",  "streda", "ctvrtek",
         "patek",   "sobota", "nedele" )

Jména dní v týdnů se nemění, jejich seznam je konstatní a v programu je obvykle budeme deklarovat jako n-tici. Při pokusu o změnu n-tice dojde za běhu programu k chybě.

Python nepožaduje aby všechny prvky seznamu, resp. n-tice, byly stejného typu, seznam může obsahovat další seznamy

[ "retezec 1", 122, "retezec 2", 12.432, [1, 2 ,3] ]

Slovníky

Slovník je datový typ, kterému se někdy též říká asociativní pole. Na rozdíl od seznamů a n-tic, které jsou indexováný celými čísly (od nuly) přistupujeme k prvkům slovníku pomocí klíčů jako jsou například řetězce, čísla a pod. Můžeme například vytvořit a inicializovat telefonni seznam

linka = {'Pavel':3526, 'Honza':3723, 'Eva':4263, 'Jirka':2393 }

Do slovníku tedy ukládáme dvojice klíč-hodnota, inicializační seznam je uzavřen ve složených závorkách. K jednotlivým prvkům přispujeme pomocí klíčů, nové klíče můžeme přidávat přiřazenim.

print linka['Honza']
linka['Ivo'] = 8722
print linka
3723
{'Eva': 4263, 'Ivo': 8722, 'Honza': 3723, 'Jirka': 2393, 'Pavel': 3526}

Metoda keys vrací seznam klíčů v daném slovníku

print linka.keys()
['Eva', 'Ivo', 'Honza', 'Jirka', 'Pavel']

Pokud chceme, aby klíče byly setříděny, musíme použít medotu sort()

s = linka.keys()
s.sort()
print s
for i in s:
    print i, ' ',
Eva   Honza   Ivo   Jirka   Pavel

Metoda has_key() anebo operátor in umožňují určit, zda je daný klíč ve slovníku

print
print linka.has_key('Eva'),  '   ', 'Eva' in linka
print linka.has_key('Hugo'), '   ', 'Hugo' in linka
True     True
False     False

Prázdný slovník vytvoříme přiřazením prázdného seznamu

a = {}

Dvojici klíč-hodnota ve slovníku zrušíme operátorem del

del linka['Pavel']

Řetězce

Iterátory