List je uspořádaná datová kolekce libovolných hodnot. Jednotlivé prvky je možné adresovat pomocí indexů. V pythonu je List považován za datový typ. Všechny operace níže je možné provádět i na textovém řetězci, jelikož na ten se dá nahlížet jako na list znaků.
Listy se zapisují pomocí hranatých závorek, takto:
seznam_cisel = [0, 1, 2, 3, 4]
seznam_lidi = ["karel", "petr", "jaroslav"]
seznam_znaku = list("Ahoj") #pomocí funkce list je možné vytvořit seznam znaků z řetězce
seznam_vseho = ["ahoj", 0, 1.2, False]
Na prvky přistupujeme pomocí indexu v hranatých závorkách. Pro čtení odzadu použijeme záporné číslo:
seznam_cisel = [7, 1, 4, 2, 3]
print(seseznam_cisel[0]) #7
print(seznam_cisel[-1]) #3
Pokud chceme adresovat pouze část seznamu můžeme využít zápis s využitím dvojtečky:
# obecný zápis: seznam_cisel[OD:DO:INKREMENT]
# OD - počáteční index (výlsedný list je včetně prvku na počátečním indexu)
# DO - konečný index (výsledný list je včetně prvku na konečném indexu)
seznam_cisel[::-1] #vrací seznam v opačném pořadí
seznam_cisel[-3:] #vrací poslední 3 prvky z listu
seznam_cisel[2:4] #vrací prvky od indexu 2 do indexu 4
seznam_cisel[0:4:2] #vrací každý druhý prvek od indexu 0 do indexu 4 inkrement po 2
Jednotlivé prvky seznamu můžeme vypsat pomocí for cyklu například takto:
seznam_cisel = [7, 1, 4, 2, 3]
for x in seznam_cisel:
print(x)
seznam_cisel = [7, 1, 4, 2, 3]
for x in range(len(seznam_cisel)):
print(seznam_cisel[x])
Na konci tohoto materiálu jsou uvedeny některé užitečné funkce pro práci se seznamy. Je však vhodné ještě zmínit několik základních operací, které je nad seznamy možné provádět:
# Spojení dvou seznamů
seznam1 = [1, 2, 3, 4]
seznam2 = [5, 6, 7, 8]
seznam3 = seznam1 + seznam2 #seznam3 bude obsahovat [1, 2, 3, 4, 5, 6, 7, 8]
# Opakování seznamů
seznam1 = [1, 2, 3, 4]
seznam2 = seznam1 * 2 #seznam2 bude obsahovat [1, 2, 3, 4, 1, 2, 3, 4]
Tyto postupy jsou pak využity níže při práci s dvourozměrnými seznamy.
Stejně jako v ostatních programovacích jazycích je i v Pythonu možné pracovat s dvourozměrnými datovými strukturami. Dvourozměrný list je možné si velmi jednoduše představit jako tabulku:
| 74 | 101 | 115 | 116 | 108 | 105 | 32 | 116 |
|---|---|---|---|---|---|---|---|
| 111 | 104 | 108 | 101 | 32 | 110 | 101 | 107 |
| 100 | 111 | 32 | 114 | 111 | 122 | 108 | 117 |
| 115 | 116 | 105 | 108 | 32 | 116 | 97 | 107 |
| 32 | 115 | 101 | 32 | 110 | 97 | 100 | 32 |
| 115 | 101 | 98 | 111 | 117 | 32 | 122 | 97 |
| 109 | 121 | 115 | 108 | 101 | 116 | 101 | 32 |
| 97 | 32 | 114 | 97 | 100 | 115 | 105 | 32 |
| 98 | 101 | 122 | 116 | 101 | 32 | 118 | 101 |
| 110 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Dvourozměrné pole v pythonu je možné inicializovat několika způsoby. Základním a nejméně praktickým je statická inicializace, kdy musíme ručně uvádět jednotlivé hodnoty.
list_hodnoty = [[1,2,3],[1,2,3]] #tento příklad vytvoří dvourozměrný list 2x3
O poznání praktičtější je využití následujících možností, tento postup využívá “opakování” seznamů uvedených výše.
# vytvoření jednoho "řádku" (listu)
# s defaultní hodnotou 0 je možné zapsat pomocí for cyklu takto:
n = []
for x in range(3):
n.append(0)
# pro zkrácenou verzi nabízí python následující syntaxi:
a = [0 for x in range(3)]
# inicializace dvourozměrného listu 3x3 by vypadala takto:
n = []
for y in range(3):
row = []
for x in range(3):
row.append(0)
n.append(row)
# ve zkrácené podobě je možné napsat následující zápis
n = [[0 for x in range(3)] for y in range(3)]
<aside> <img src="/icons/exclamation-mark_pink.svg" alt="/icons/exclamation-mark_pink.svg" width="40px" />
Při inicializaci dvourozměrného pole by nás mohlo napadnout využít následující zápis:
a = [[0] * x] * y Ten však nefunguje tak jak bychom předpokládali. V tomto zápisu dochází ke sdílení referencí mezi řádky. V poli je vlastně pouze n referencí na jeden a ten samý objekt v paměti. Změna jednoho prvku v řádku, nám takto přepíše všechny řádky.
</aside>