Ve škole máte na chodbě řadu očíslovaných skříněk. Každá má číslo a v každé něco je. Když chceš věc ze skříňky 3, nemusíš prohledávat všechny. Jdeš rovnou ke trojce.
Seznam je taková řada skříněk v paměti. Do jedné proměnné uložíš třeba známky celé třídy, nákupní seznam nebo skóre všech hráčů. Pak s nimi pracuješ najednou, nejčastěji cyklem.
znamky = [1, 3, 2, 1][1, 3, 2] jsou tři prvky.a = [3, 1, 4] je a[0] = 3 a a[-1] = 4.len()Funkce, která vrátí počet prvků seznamu.len([3, 1, 4]) je 3.| prvek | 3 | 1 | 4 | 1 | 5 |
|---|---|---|---|---|---|
| index | 0 | 1 | 2 | 3 | 4 |
| záporný index | −5 | −4 | −3 | −2 | −1 |
Seznam a = [3, 1, 4, 1, 5] má 5 prvků. Indexy jdou od 0 do 4. Index 5 už neexistuje a a[5] skončí chybou IndexError.
| Zápis | Co udělá | a = [3, 1, 4] potom |
|---|---|---|
a[0] = 7 | přepíše prvek na indexu 0 | [7, 1, 4] |
a.append(9) | přidá prvek na konec | [3, 1, 4, 9] |
a.insert(0, 8) | vloží prvek na index 0 | [8, 3, 1, 4] |
a.remove(1) | smaže první výskyt hodnoty 1 | [3, 4] |
a.pop() | odebere a vrátí poslední prvek | [3, 1] |
znamky = [1, 3, 2, 1]soucet = 0for z in znamky: soucet = soucet + zprint(soucet / len(znamky))Cyklus vezme postupně každou známku a přičte ji. Součet je 7, prvky jsou 4, vypíše průměr 1.75.
a = [3, 1, 4, 1, 5]. Co je a[2] a a[-2]?max().nej = a[0], pak for x in a: → if x > nej: nej = x. Začneš prvním prvkem a každý větší si zapamatuješ. Pro [3, 1, 4, 1, 5] vyjde 5. (Python to umí i hotově: max(a).)a je a[1].a[0], poslední a[len(a) - 1] neboli a[-1].Indexy v Pythonu začínají nulou. Index říká, o kolik míst jsi od začátku.
[ ]. Indexy začínají nulou, −1 je poslední prvek. append přidává, remove a pop odebírají, for prochází všechny prvky.Máš výsledky závodu jako seznam časů. Chceš první tři, chceš je seřadit, chceš jen časy pod minutu. Python na to má krátké zápisy, které ušetří spoustu řádků.
Naučíš se řezy, užitečné funkce a jednu záludnost: dvě proměnné mohou ukazovat na tentýž seznam.
[ ], která jde měnit. Index je pořadí prvku od nuly, záporný od konce.casy = [58, 63, 49, 71], casy[0] je 58, casy[-1] je 71.a[od:do] vrátí nový seznam s prvky od indexu od do indexu do − 1. Vynechaná mez znamená začátek nebo konec. Třetí číslo je krok.casy[1:3] je [63, 49], casy[:2] je [58, 63], casy[::-1] je seznam pozpátku.casy.sort() seřadí seznam casy na místě.b = a seznam nezkopíruje, jen vytvoří druhý odkaz na tentýž seznam.Po b = a a b.append(4) se změní i a.| Zápis | Výsledek pro a = [3, 1, 4, 1, 5] |
|---|---|
len(a) | 5 |
sum(a), max(a), min(a) | 14, 5, 1 |
sorted(a) | nový seřazený seznam [1, 1, 3, 4, 5] |
a.sort() | seřadí přímo a, vrací None |
a.count(1) | 2 (kolikrát je tam 1) |
4 in a | True |
a + [9], [0] * 3 | spojení seznamů, opakování [0, 0, 0] |
Krátký zápis, jak z jednoho seznamu vyrobit jiný: [výraz for prvek in seznam if podmínka].
[i * i for i in range(4)]?casy = [58, 63, 49, 71] vyber jen časy pod 60.[c for c in casy if c < 60] → [58, 49]. Totéž jako cyklus s if a append, jen na jednom řádku.Prvkem seznamu může být zase seznam. Tak vznikne tabulka (matice). m = [[1, 2], [3, 4]]: m[1] je řádek [3, 4] a m[1][0] je 3.
a[1:3] pro a = [3, 1, 4, 1, 5] – [1, 4]a[:2] – [3, 1]a[-1] – 5a[::-1] – [5, 1, 4, 1, 3]len(a) – 5Řekni si výsledek nahlas a teprve pak kartičku otoč.
b = a vytvoří kopii seznamu, takže b.append(4) změní jen b.b = a.copy() nebo b = a[:].b = a jen přidá druhé jméno k témuž seznamu. Změna přes jedno jméno je vidět i přes druhé.
a[od:do] vrací prvky od od do do − 1. sorted() vrací nový seřazený seznam, sort() řadí na místě. b = a seznam nekopíruje, kopii udělá a.copy().