Python - Seznamy, n-tice, slovníky, řetězce a iterátory: Porovnání verzí
m (→Řetězce) |
m (zvyrazneni syntaxe+sablona python) |
||
Řádek 6: | Řádek 6: | ||
Jednoduchý seznam v Pythonu vytvoříme například takto | Jednoduchý seznam v Pythonu vytvoříme například takto | ||
<source lang="python"> | |||
ptaci = [ "sokol", "krahujec", "koroptev", "lelek" ] | ptaci = [ "sokol", "krahujec", "koroptev", "lelek" ] | ||
</source> | |||
počet prvků seznamu určuje funkce <tt>len(),</tt> 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. <tt>len(ptaci)-1.</tt> Cyklus | počet prvků seznamu určuje funkce <tt>len(),</tt> 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. <tt>len(ptaci)-1.</tt> Cyklus | ||
<source lang="python"> | |||
for i in range(len(ptaci)): | for i in range(len(ptaci)): | ||
print ptaci[i] | print ptaci[i] | ||
</source> | |||
vytiskne všechny ptáky z naše seznamu. | vytiskne všechny ptáky z naše seznamu. | ||
Řádek 22: | Řádek 26: | ||
Hodnoty prvků seznamu můžeme měnit přiřazením, například | Hodnoty prvků seznamu můžeme měnit přiřazením, například | ||
<source lang="python"> | |||
ptaci[2] = "vrabec" | ptaci[2] = "vrabec" | ||
</source> | |||
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 | 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 | ||
<source lang="python"> | |||
tyden = ("pondeli", "utery", "streda", "ctvrtek", | tyden = ("pondeli", "utery", "streda", "ctvrtek", | ||
"patek", "sobota", "nedele" ) | "patek", "sobota", "nedele" ) | ||
</source> | |||
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ě. | 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ě. | ||
Řádek 33: | Řádek 41: | ||
Python nepožaduje aby všechny prvky seznamu, resp. n-tice, byly stejného typu, seznam může obsahovat další seznamy | Python nepožaduje aby všechny prvky seznamu, resp. n-tice, byly stejného typu, seznam může obsahovat další seznamy | ||
<source lang="python"> | |||
[ "retezec 1", 122, "retezec 2", 12.432, [1, 2 ,3] ] | [ "retezec 1", 122, "retezec 2", 12.432, [1, 2 ,3] ] | ||
</source> | |||
== Slovníky == | == Slovníky == | ||
Řádek 39: | Řádek 49: | ||
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 | 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 | ||
<source lang="python"> | |||
linka = {'Pavel':3526, 'Honza':3723, 'Eva':4263, 'Jirka':2393 } | linka = {'Pavel':3526, 'Honza':3723, 'Eva':4263, 'Jirka':2393 } | ||
</source> | |||
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. | 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. | ||
<source lang="python"> | |||
print linka['Honza'] | print linka['Honza'] | ||
linka['Ivo'] = 8722 | linka['Ivo'] = 8722 | ||
Řádek 49: | Řádek 62: | ||
3723 | 3723 | ||
{'Eva': 4263, 'Ivo': 8722, 'Honza': 3723, 'Jirka': 2393, 'Pavel': 3526} | {'Eva': 4263, 'Ivo': 8722, 'Honza': 3723, 'Jirka': 2393, 'Pavel': 3526} | ||
</source> | |||
Metoda <tt>keys</tt> vrací seznam klíčů v daném slovníku | Metoda <tt>keys</tt> vrací seznam klíčů v daném slovníku | ||
<source lang="python"> | |||
print linka.keys() | print linka.keys() | ||
['Eva', 'Ivo', 'Honza', 'Jirka', 'Pavel'] | ['Eva', 'Ivo', 'Honza', 'Jirka', 'Pavel'] | ||
</source> | |||
Pokud chceme, aby klíče byly setříděny, musíme použít medotu <tt>sort()</tt> | Pokud chceme, aby klíče byly setříděny, musíme použít medotu <tt>sort()</tt> | ||
<source lang="python"> | |||
s = linka.keys() | s = linka.keys() | ||
s.sort() | s.sort() | ||
Řádek 64: | Řádek 81: | ||
Eva Honza Ivo Jirka Pavel | Eva Honza Ivo Jirka Pavel | ||
</source> | |||
Metoda <tt>has_key()</tt> anebo operátor <tt>in</tt> umožňují určit, zda je daný klíč ve slovníku | Metoda <tt>has_key()</tt> anebo operátor <tt>in</tt> umožňují určit, zda je daný klíč ve slovníku | ||
<source lang="python"> | |||
print | print | ||
print linka.has_key('Eva'), ' ', 'Eva' in linka | print linka.has_key('Eva'), ' ', 'Eva' in linka | ||
Řádek 73: | Řádek 92: | ||
True True | True True | ||
False False | False False | ||
</source> | |||
Prázdný slovník vytvoříme přiřazením prázdného seznamu | Prázdný slovník vytvoříme přiřazením prázdného seznamu | ||
<source lang="python"> | |||
a = {} | a = {} | ||
</source> | |||
Dvojici klíč-hodnota ve slovníku zrušíme operátorem <tt>del</tt> | Dvojici klíč-hodnota ve slovníku zrušíme operátorem <tt>del</tt> | ||
<source lang="python"> | |||
del linka['Pavel'] | del linka['Pavel'] | ||
</source> | |||
== Řetězce == | == Řetězce == | ||
Řádek 86: | Řádek 110: | ||
Řetězce v Pyhonu mohou být uzavřeny dvojicí uvozovek nebo dvojicí apostrofů | Řetězce v Pyhonu mohou být uzavřeny dvojicí uvozovek nebo dvojicí apostrofů | ||
<source lang="python"> | |||
a = 'jeden řetězec' | a = 'jeden řetězec' | ||
b = "druhý řetězec" | b = "druhý řetězec" | ||
</source> | |||
Implicitní kódování Pythonu je [http://en.wikipedia.org/wiki/ASCII ASCII], pokud ve skriptu pracujeme s jiným kódováním musíme je definovat na prvním nebo druhém komentářovém řádku | Implicitní kódování Pythonu je [http://en.wikipedia.org/wiki/ASCII ASCII], pokud ve skriptu pracujeme s jiným kódováním musíme je definovat na prvním nebo druhém komentářovém řádku | ||
<source lang="python"> | |||
#!/usr/bin/python | #!/usr/bin/python | ||
# coding=utf-8 | # coding=utf-8 | ||
print 'řetězec v kódování utf-8' | print 'řetězec v kódování utf-8' | ||
</source> | |||
Dlouhé řetězce, které pokračují na více řádcích můžeme zapsat například takto | Dlouhé řetězce, které pokračují na více řádcích můžeme zapsat například takto | ||
<source lang="python"> | |||
print "Toto je dlouhý řetězec\n\ | print "Toto je dlouhý řetězec\n\ | ||
který pokračuje ne několika řádcích\n\ | který pokračuje ne několika řádcích\n\ | ||
všimněte si. že úvodní mezery jsou významné" | všimněte si. že úvodní mezery jsou významné" | ||
</source> | |||
Pro | Pro víceřádkové řetězce ale Python nabízí elegantnější konstrukci, kdy řetězec je uzavřen do trojic apostrofů nebo uvozovek (bez \n a \) | ||
<source lang="python"> | |||
print """Toto je dlouhý řetězec | print """Toto je dlouhý řetězec | ||
který pokračuje ne několika řádcích | který pokračuje ne několika řádcích | ||
Řádek 115: | Řádek 146: | ||
== Iterátory == | == Iterátory == | ||
[ [[Python|Zpět]] ] | |||
{{Python}} |
Verze z 20. 4. 2008, 19:54
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
Řetězce v Pyhonu mohou být uzavřeny dvojicí uvozovek nebo dvojicí apostrofů
a = 'jeden řetězec'
b = "druhý řetězec"
Implicitní kódování Pythonu je ASCII, pokud ve skriptu pracujeme s jiným kódováním musíme je definovat na prvním nebo druhém komentářovém řádku
#!/usr/bin/python
# coding=utf-8
print 'řetězec v kódování utf-8'
Dlouhé řetězce, které pokračují na více řádcích můžeme zapsat například takto
print "Toto je dlouhý řetězec\n\
který pokračuje ne několika řádcích\n\
všimněte si. že úvodní mezery jsou významné"
Pro víceřádkové řetězce ale Python nabízí elegantnější konstrukci, kdy řetězec je uzavřen do trojic apostrofů nebo uvozovek (bez \n a \)
<source lang="python">
print """Toto je dlouhý řetězec který pokračuje ne několika řádcích všimněte si. že úvodní mezery jsou významné"""
Toto je dlouhý řetězec který pokračuje ne několika řádcích všimněte si. že úvodní mezery jsou významné
Prvky řetězce, tj. jednotlivé znaky, můžeme indexovat obdobně jako prvky seznamů.
Iterátory
[ Zpět ]