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.

Dvourozměrné 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>