@@ -5,7 +5,9 @@ který si můžeš vytisknout.
55# Seznamy
66
77Dnes si ukážeme, jak pracovat se * seznamy* (angl. * lists* ).
8- Zapisují se hranatými závorkami:
8+
9+ Začneme prakticky.
10+ Vytvoř si seznam pomocí následujícího kódu:
911
1012``` python
1113zviratka = [' pes' , ' kočka' , ' králík' ]
@@ -18,30 +20,32 @@ print(zviratka)
1820
1921Seznam je hodnota, která může obsahovat spoustu dalších hodnot.
2022Tak jako řetězec obsahuje sekvenci znaků,
21- seznam obsahuje sekvenci... čehokoliv. Třeba slov (řetězců).
22- A tak jako můžeme pomocí cyklu ` for `
23- procházet řetězec po znacích,
24- seznam můžeme procházet po jednotlivých prvcích:
23+ seznam obsahuje sekvenci jakýchkoli hodnot.
24+ V našem případě obsahuje sekvenci řetězců.
25+
26+ A tak jako můžeš pomocí cyklu ` for ` procházet řetězec po znacích,
27+ seznam můžeš procházet po jednotlivých prvcích:
2528
2629``` python
2730for zviratko in zviratka:
2831 print (zviratko)
2932```
3033
31- Seznamy se v programech vyskytují velice často:
32- soubor se dá načíst jako seznam řetězců
33- s jednotlivými řádky,
34- seznam řetězců jako ` '7♥' `
35- a ` 'K♣' ` může posloužit jako balíček karet,
36- matematika je plná číselných řad,
37- každá online služba má seznam uživatelů.
34+ Seznamy se v programech vyskytují často:
35+ soubor se dá načíst jako seznam řetězců s jednotlivými řádky,
36+ seznam řetězců jako ` '7♥' ` a ` 'K♣' ` může posloužit jako balíček karet,
37+ matematika je plná číselných řad, každá online služba má seznam uživatelů.
38+
39+ Hodnoty v seznamu můžou být jakéhokoli typu:
3840
41+ ``` python
42+ prvni_prvocisla = [2 , 3 , 5 , 7 , 11 ]
43+ ```
3944
40- Hodnoty v seznamu můžou být jakéhokoli typu.
41- Dokonce můžeš různé typy míchat v jednom seznamu
42- (i když s takovými namixovanými seznamy se
43- příliš často nesetkáš – více se různé typy hodnot
44- používají v <var >n</var >-ticích, o kterých si povíme později):
45+ Dokonce můžeš různé typy míchat v jednom seznamu.
46+ (S takovými namixovanými seznamy se ovšem příliš často nesetkáš.
47+ Různé typy hodnot se používají spíš v <var >n</var >-ticích, o kterých si povíme
48+ později):
4549
4650``` python
4751seznam = [1 , ' abc' , True , None , range (10 ), len ]
@@ -109,13 +113,14 @@ seznam, se kterým pracuje. Vyzkoušej si to:
109113```
110114
111115Všimni si, že proměnná ` zviratka ` se nastavuje jen na začátku.
112- V celém programu výše je jen jeden seznam – na začátku má tři prvky, pak
113- mu jeden přibude, ale stále je to jeden a ten samý seznam.
116+ V rámci celého běhu programu výše existuje je jen jeden seznam.
117+ Na začátku má tři prvky, pak mu jeden přibude, ale stále je to jeden a ten
118+ samý seznam.
114119
115120Takové měnění může být občas překvapující,
116121protože stejná hodnota může být přiřazená ve více proměnných.
117122Protože se mění hodnota samotná, může to vypadat,
118- že se „mění proměnná, aniž na ni sáhneme ”:
123+ že se „mění proměnná, aniž na ni sáhneš ”:
119124
120125``` python
121126a = [1 , 2 , 3 ] # Vytvoření seznamu
@@ -129,6 +134,7 @@ a.append(4)
129134print (b)
130135```
131136
137+
132138## Další způsoby, jak měnit seznamy
133139
134140Kromě metody ` append ` , která přidává jediný prvek na konec, existuje
@@ -139,7 +145,7 @@ Všechny udělají změny přímo v daném seznamu a (kromě `pop`) vrací `Non
139145* ` insert() ` přidá prvek na danou pozici,
140146* ` pop() ` odebere * a vrátí* poslední prvek,
141147* ` remove() ` odstraní první výskyt daného prvku,
142- * ` sort() ` seznam seřadí (řetězce “ podle abecedy”, čísla vzestupně),
148+ * ` sort() ` seznam seřadí (řetězce podle “ abecedy”, čísla vzestupně),
143149* ` reverse() ` obrátí pořadí prvků,
144150* ` clear() ` odstraní všechny prvky.
145151
@@ -340,11 +346,10 @@ A dokonce i čísla – ta jako podmínka platí, pokud jsou nenulová.
340346
341347Tak jako funkce ` int ` převádí na
342348celá čísla a ` str ` na řetězce,
343- funkce ` list ` (angl. * seznam * ) převádí na seznam.
349+ funkce ` list ` převádí na seznam.
344350Jako argument jí můžeš předat jakoukoli hodnotu,
345351kterou umí zpracovat příkaz ` for ` .
346- Z řetězců udělá seznam znaků, z otevřeného souboru
347- udělá seznam řádků, z ` range ` udělá seznam čísel.
352+ Z řetězců udělá seznam znaků, z ` range ` udělá seznam čísel.
348353
349354``` python
350355abeceda = list (' abcdefghijklmnopqrstuvwxyz' )
@@ -384,22 +389,32 @@ for cislo in range(10):
384389print (mocniny_dvou)
385390```
386391
392+ Podobným způsobem získáš seznam seznam ` matka ` , ` babička ` , ` prababička ` ,
393+ ` praprababička ` , atd.:
394+
395+ ``` python
396+ predkove = [' matka' ]
397+ for pocet_pra in range (10 ):
398+ predkove.append(' pra' * pocet_pra + ' babička' )
399+ print (predkove)
400+ ```
401+
387402Chceš-li seznam, který reprezentuje balíček karet,
388- zavolej ` append ` pro všechny kombinace barev a hodnot.
403+ zavolej ` append ` pro všechny kombinace barev a hodnot:
389404
390405``` python
391406balicek = []
392- for barva in ' ♠' , ' ♥' , ' ♦' , ' ♣' : # (Na Windows použij textová jména)
407+ for barva in ' ♠' , ' ♥' , ' ♦' , ' ♣' :
393408 for hodnota in list (range (2 , 11 )) + [' J' , ' Q' , ' K' , ' A' ]:
394409 balicek.append(str (hodnota) + barva)
395410print (balicek)
396411```
397412
398413## Seznamy a řetězce
399414
400- Seznamy a řetězce jsou druhy „ sekvencí”,
401- takže snad nepřekvapí, že se dá různě převádět
402- z jednoho typu na druhý.
415+ Seznamy a řetězce jsou druhy * sekvencí* .
416+ Můžeš různě převádět z jednoho typu na druhý.
417+
403418Funkce ` list ` vytvoří z řetězce seznam znaků.
404419Když chceš dostat seznam slov, použij
405420na řetězci metodu ` split ` (angl. * rozdělit* ):
@@ -438,7 +453,7 @@ třeba nám už známou `random.randrange`.
438453Podívejme se na dvě další, které se hodí k seznamům.
439454
440455Funkce ` shuffle ` seznam „zamíchá” – všechny prvky náhodně popřehází.
441- Seznam změní „na místě“ a nic nevrací – podobně jako metoda ` sort ` .
456+ Seznam změní „na místě“ a nic nevrací ( podobně jako metoda ` sort ` ) .
442457
443458``` python
444459import random
@@ -454,84 +469,12 @@ print(balicek)
454469```
455470
456471A funkce ` choice ` ze seznamu vybere jeden náhodný prvek.
457- S použitím seznamu tak můžeš třeba jednoduše vybrat tah pro hru
472+ S použitím seznamu tak můžeš třeba jednoduše vybrat tah pro hru
458473kámen/nůžky/papír:
459474
460475``` python
461476import random
462477mozne_tahy = [' kámen' , ' nůžky' , ' papír' ]
463478tah_pocitace = random.choice(mozne_tahy)
479+ print (tah_pocitace)
464480```
465-
466- ## Vnořené seznamy
467-
468- A perlička na konec!
469- Na začátku tohoto textu je napsáno, že seznam
470- může obsahovat jakýkoli typ hodnot.
471- Může třeba obsahovat i další seznamy:
472-
473- ``` python
474- seznam_seznamu = [[1 , 2 , 3 ], [4 , 5 , 6 ], [7 , 8 , 9 ]]
475- ```
476-
477- Takový seznam se chová docela normálně – můžeš z něj třeba brát jednotlivé
478- prvky (které jsou ovšem taky seznamy):
479-
480- ``` python
481- prvni_seznam = seznam_seznamu[0 ]
482- print (prvni_seznam)
483- ```
484-
485- A protože jsou prvky samy seznamy,
486- dá se mluvit o věcech jako „první prvek druhého seznamu”:
487-
488- ``` python
489- druhy_seznam = seznam_seznamu[1 ]
490- prvni_prvek_druheho_seznamu = druhy_seznam[0 ]
491- print (prvni_prvek_druheho_seznamu)
492- ```
493-
494- A protože výraz ` seznam_seznamu[1] `
495- označuje seznam, můžeš brát prvky přímo z něj:
496-
497- ``` python
498- prvni_prvek_druheho_seznamu = (seznam_seznamu[1 ])[0 ]
499- ```
500-
501- Neboli:
502-
503- ``` python
504- prvni_prvek_druheho_seznamu = seznam_seznamu[1 ][0 ]
505- ```
506-
507- A má tahle věc nějaké použití?
508- Stejně jako vnořené cykly ` for ` ti umožnily vypsat tabulku, vnořené seznamy
509- ti umožní si tabulku „zapamatovat”.
510-
511- ``` python
512- def vytvor_tabulku (velikost = 11 ):
513- seznam_radku = []
514- for a in range (velikost):
515- radek = []
516- for b in range (velikost):
517- radek.append(a * b)
518- seznam_radku.append(radek)
519- return seznam_radku
520-
521- nasobilka = vytvor_tabulku()
522-
523- print (nasobilka[2 ][3 ]) # dva krát tři
524- print (nasobilka[5 ][2 ]) # pět krát dva
525- print (nasobilka[8 ][7 ]) # osm krát sedm
526-
527- # Vypsání celé tabulky
528- for radek in nasobilka:
529- for cislo in radek:
530- print (cislo, end = ' ' )
531- print ()
532- ```
533-
534- Co s takovou „zapamatovanou” tabulkou?
535- Můžeš si do ní uložit třeba pozice
536- figurek na šachovnici nebo křížků a koleček
537- ve * 2D* piškvorkách.
0 commit comments