Návod na Python: Pole neboli seznam

Pole jako datová struktura

K čemu jsou pole? Zatím jsme v Pythonu pracovali s daty pouze prostřednictvím proměnných základních datových typů: int, float, str a bool. Většinou ale chceme zpracovávat větší objem dat (např. minutové měření venkovní teploty, tlaku, vlhkosti apod.) a tam bychom museli mít proměnných strašně moc a špatně by se nám s nimi pracovalo.

Proto programovací jazyky nabízí tzv. strukturované datové typy a Python samozřejmě není výjimkou. Python datovou strukturu pole označuje jako seznam, anglicky list. A jako všechny datové typy v Pythonu, i pole (seznam) je objekt a nabízí tedy nejrůznější metody pro práci s ním.

Co je pole

Pod pojmem pole rozumíme v programování strukturovaný datový typ, ve které máme k dispozici určitý počet proměnných stejného typu pod jedním názvem, k dílčím proměnným neboli prvkům pole přistupujeme pomocí indexů. Ideálně si představte pole jako řadu očíslovaných krabiček.

Pole jako datová struktura
© Logickémyšlení.cz

V každé krabičce je jedna hodnota daného datového typu (např. číslo). Pokud se naše pole bude jmenovat třeba Pole a bude mít délku 10 krabiček (jako na obrázku) očíslovaných (oindexovaných) čísly 0 až 9, pak máme k dispozici de facto 10 proměnných s názvy Pole[0], Pole[1], … až Pole[9].

Jak vytvořit pole v Pythonu a jak přistupovat k jeho prvkům

Na výběr máme několik možností. První možností je pole přímo naplnit v rámci přiřazovacího příkazu jednotlivými prvky. Python nám umožní dokonce i to, aby prvky byly různých datových typů, nicméně to kvůli ztížené práci s prvky pole moc nedoporučujeme.

Pole1 = []                               # prázdné pole
Pole2 = [1, 2, 3, 4, 5, 6]               # pole celých čísel od 1 do 6
Pole3 = ["pes", "kočka", "papoušek"]     # pole řetězců (typu str)
Pole4 = [3, "želva", 2.59, True]         # pole s prvky různých typů
Pole5 = [[1, 0, 0],                      # dvourozměrné pole = pole, jehož prvky 
         [0, 1, 0],                      # jsou opět pole
         [0, 0, 1]

K jednotlivým prvků přistupujeme pomocí indexů, tj. čísla prvku v hranatých závorkách. Tím získáme de facto název proměnné daného prvku pole. Python čísluje prvky vždy od nuly, první prvek je tedy de facto nultý, druhý je první atd. P

print(Pole2[0])                          # vytiskne číslo 1
print(Pole2[2])                          # vytiskne v pořadí třetí prvek, tj. 3
print(Pole3[1])                          # vytiskne řetězec "kočka" bez uvozovek
A = Pole4[0] + Pole4[2]                  # vytiskne číslo 5.59
B = Pole4[0] + Pole4[1]                  # ohlásí chybu, neumí sečíst 3 a želvu
print(Pole5[1][1])                       # vytiskne 1, z 2. řádku a 2. sloupce 
                                         # dvourozměrného pole Pole5
print(Pole5[2])                          # vytiskne 3.podpole, tj. [0, 0, 1]

Další možností, jak pole v Pythonu vytvořit, je použít konstruktor range, který vytvoří objekt obvykle používaný pro iterátor v cyklu for. Ten je ovšem nutné přetypovat funkcí (konstruktorem) list, aby výsledek nebyl objekt typu range, ale Pythonovský seznam:

Pole6 = list(range(5)                   # range vytvoří objekt s čísly 0 až 4
print(Pole6)                            # list ho změní na seznam [0, 1, 2, 3, 4]

Třetí, často používanou možností, je vytvořit prázdné pole a postupně ho plnit prvky v cyklu typu for s pomocí metody append(). Ta vždy přidá nový prvek na konec již existujícího seznamu. Zde už využíváme toho, že veškeré datové struktury v Pythonu jsou objekty a tedy můžeme používat jejich předdefinované metody:

Pole7 = []                              # nejprve vytvoříme prázdné pole
for i in range(5):                      # v cyklu pro i od 0 do 4 ho naplníme
  Pole7.append(i+1)                     # výsledkem je seznam [1, 2, 3, 4, 5]

Poslední příklad se skvěle hodí pro vytvoření dvourozměrného pole, např. matice N x N:

N = 10                                 # velikost matice
Matice = []                            # připravíme si prázdnou matici
for i in range(N):                     # N krát
  Radek = list(range(N))                 # vytvoříme si řádek
  Matice.append(Radek)                   # připojíme ho do matice
print(Matice)                          # vytiskne matici 10 x 10, kde je každý
                                       # řádek roven [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]