Pole a slovníky¶
V programovacích jazycích můžeme pracovat s poli (seznamy, množinami) prvků. V Pythonu můžeme kombinovat různé datové typy jednotlivých prvků v poli.
Nejjednodušším případem pole může být pole celých čísel od 0 do 9:
>>> cisla = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(cisla)
Z výše uvedeného je patrné, že pole zapisujeme do hranatých závorek. Jak jsme psali výše, neusíme se omezovat ja jeden datový typ:
>>> netrideny_srot = [1000, 'elce pelce do pekelce', 10/3]
K prvkům pole přistupujeme pomocí indexů - pomocí čísla pozice prvku v poli, první index má hodnotu 0:
>>> print(netrideny_srot[0])
1000
>>> print(netrideny_srot[2])
3.3333333333333335
>>> print(cisla[5])
4
>>> print(cisla[10])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range
Poslední příklad „vyhodil“ IndexError
- pokusili jsme se zobrazit hodnotu
jedenáctého prvku v poli (index 10, ale počítáme od 0!), pole cisla
má ale
pouze 10 prvků (maximální index je proto 9).
Funkce len()
nám vrátí celkovou délku pole (počet jeho prvků):
>>> len(cisla)
10
>>> len(netrideny_srot)
3
Pole můžeme slučovat:
>>> jeste_vetsi_srot = cisla + netrideny_srot
>>> print(jeste_vetsi_srot)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 1000, 'elce pelce do pekelce', 3.3333333333333335]
K prvkům pole můžeme přistupovat „od zadu“ používáním záporných indexů. Hodnotu posledního prvku v poli můžeme získat následujícími dvěma způsoby:
>>> cisla[len(cisla)-1] # len() vrátí délku pole, nejvyšší index má ale hodnotu o 1 menší
9
>>> cisla[-1]
9
„Vyzobnout“ pouze určité prvky z pole můžeme pomocí zadání dvou krajních indexů:
>>> jeste_vetsi_srot[8:11]
[8, 9, 1000, 'elce pelce do pekelce']
N-tice (tuple)¶
Uspořádané n-tice prvků (v Pythonu se jmenují tuple) se chovají stejně jako pole, ale s tím rozdílem, že po jejich inicializaci je nemůžeme nijak měnit. Použít se dají pro větší bezpečnost (nelze je přepsat) u vstupních hodnot v prgramu (např. dny v týdnu, měsíce, senzam vstupních hodnot a pod.).
Chovají se stejně jako seznamy, akorát při inicializaci se nepoužívají závorky hranaté, ale kulaté.
>>> tyden = ('pondeli', 'utery', 'streda', 'ctvrtek', 'patek', 'sobota', 'nedele')
>>> print(tyden[3])
ctvrtek
Slovníky (asociativní pole)¶
Slovníky jsou v podstatě pole s tím rozdílem, že k jednotlivým prvkům se nepřistupuje pomocí číselných indexů, ale pomocí pojmenovaných odkazů. Při jejich definici používáme složené závorky { } a klíč od hodnoty oddělujeme dvojtečkou :.
>>> telefonni_seznam = {
'Petr': 728123432,
'Pavel': 8344569870,
'Klara': 9087354398,
'Verca': 87698394,
...}
>>> print(telefonni_seznam['Petr'])
728123432
Zanořování polí¶
Jednotlivé prvky polí mohou být jakéhokoliv datového typu - číslo, text nebo i jiné pole. Takto můžeme vytvářet matice (uspořádané n-tice řádků a sloupců) jako pole polí:
>>> cerveny_kanal = [
[1, 2, 3, 4, 5, 6, 7, 8, 9],
[5, 2, 3, 4, 2, 6, 7, 8, 8],
[1, 2, 3, 4, 5, 8, 7, 8, 9],
[3, 2, 8, 4, 0, 6, 3, 8, 10],
[1, 5, 3, 4, 2, 6, 2, 8, 1],
[8, 2, 7, 4, 5, 0, 7, 5, 9],
[1, 8, 3, 3, 5, 9, 7, 1, 9],
[2, 2, 3, 4, 7, 6, 2, 8, 0],
[1, 2, 3, 4, 5, 6, 7, 8, 9]
]
Zanořovat pole lze samozřejmě „prakticky“ nekonečně:
>>> rastr = [
cerveny_kanal,
zeleny_kanal,
modry_kanal
]
Stejně tak můžeme libovolně zanořovat slovníky. Ty se využívají v populární datovém formátu JSON a od něho odvozeného formátu GeoJSON:
>>> vrstva = { "type": "FeatureCollection",
"features": [
{ "type": "Feature",
"geometry": {"type": "Point", "coordinates": [102.0, 0.5]},
"properties": {"prop0": "value0"}
},
{ "type": "Feature",
"geometry": {
"type": "LineString",
"coordinates": [
[102.0, 0.0], [103.0, 1.0], [104.0, 0.0], [105.0, 1.0]
]
},
"properties": {
"prop0": "value0",
"prop1": 0.0
}
},
{ "type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[ [100.0, 0.0], [101.0, 0.0], [101.0, 1.0],
[100.0, 1.0], [100.0, 0.0] ]
]
},
"properties": {
"prop0": "value0",
"prop1": {"this": "that"}
}
}
]
}
Nyní můžeme zjistit první souřadnici druhého objektu a jeho geometrický typ:
>>> print(vrstva['features'][1]['geometry']['type'])
LineString
>>> print(vrstva['features'][1]['geometry']['coordinates'][0])
[102.0, 0.0]