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.
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]