ESP32 / ESP8266 MicroPython: Práce se seznamy
- August 04 2019
- ESP32, ESP8266, NodeMCU , Wemos, RTLDuino...
- 10214x Přečteno
Cílem tohoto návodu je vysvětlit, jak používat seznamy (anglicky list) v MicroPythonu. Seznamy jsou v Pythonu velice důležité datové struktury, které byly přeneseny i do MicroPythonu. Cílem není projít všechny dostupné funkce tohoto datového typu, ale pouze ukázat jeho hlavní výhody a možnosti.
Všechny články o MicroPython a ESP32/ESP8266 najdete na https://chiptron.cz/articles.php?cat_id=23
Tento návod byl testován na ESP32-WROOM-32 a ESP8266 pomocí nástrojů uPyCraft a MicroPython IDE. Návod na zprovoznění těchto zařízení a nástrojů naleznete v předchozích příspěvcích. Nejjednodušší způsob, jak projít návodem, je posílat příkazy přímo do konzole.
Vytváření seznamů:
Pro vytvoření není nutné volat konstruktor. Seznam se vytvoří umístěním prvků (čísla, písmena atd.) mezi hranaté závorky (viz následující příkazy).
intList = [1,2,3,4,5]
print(intList)
stringList = ['a','b','c','d','e']
print(stringList)
type(stringList)
Posledním příkazem je kontrola datového typu seznamu s čísly a seznamu s textovými řetězci. Vidíme, že je v obou případech datový typ list (seznam).
Obrázek 1 – Ověření datového typu
Velkou výhodou seznamů je, že můžeme mít v rámci jednoho seznamu více datových typů (viz následující příkazy a obr. 2).
objectList = [1, 2, 'a', 'b', 'c', [ 1, 2, 3] ]
print (objectList)
type(objectList)
Obrázek 2 – Výstup z konzole
Poslední možností při vytváření seznamů je vytvoření prázdného seznamu pomocí prázdných hranatých závorek. Taková možnost se může hodit v okamžiku, kdy chceme postupně do seznamu přidávat prvky a je potřeba si proměnnou nejprve vytvořit.
emptyList = []
print (emptyList)
Přístup k prvkům v seznamu:
Pro přístup ke konkrétnímu prvku použijeme opět hranaté závorky. Je nutné si dát pozor na indexaci prvků od 0. Takto například přistoupíme k prvnímu a druhému prvku.
myList = [1,2,3]
print (myList[0])
print (myList[1])
K prvkům není nutné přistupovat jednotlivě. Můžeme také přistoupit k prvním třem prvkům v jednom příkazu pomocí použití indexu 0:2. Tento index se interně promění ve 3 indexy – 0,1,2. Je tedy možné vidět, že obecná syntaxe je začátek:konec.
print (myList[0:3])
type(myList[0])
type(myList[0:3])
Pro test si vypíšeme i datový typ, ze kterého je možné si všimnout rozdílu při indexaci jednoho prvku a více prvků zároveň.
Obrázek 3 – Indexace více prvků
Pomocí tohoto způsobu indexace můžeme také určit pouze jeden z limitů a druhý se doplní automaticky podle délky pole. Pokud tedy například uvedu 1: znamená to všechny prvky od druhého (indexace od nuly) do konce.
print(myList[0:])
print(myList[:3])
print(myList[1:])
Obrázek 4 – Indexace více prvků jen s jedním indexem
Dalším (a často používaným) způsobem indexace je pomocí záporných indexů. Záporné číslo znamená počet prvků od konce pole. Prvek s indexem -1 je posledním prvkem pole.
print(myList[-1])
print(myList[-2])
print(myList[-3])
Obrázek 5 – Indexace od konce
Jednotlivé prvky můžeme samozřejmě nahrazovat novými hodnotami. Nové hodnoty mohou mít i jiné datové typy, než má prvek předchozí.
testList = ['a', 'b', 'c']
print(testList)
testList[0] = 1
testList[1] = 2
testList[2] = 3
print(testList)
Obrázek 6 – Přiřazení do prvků seznamu
Zajímavé metody a funkce:
Asi nejčastěji používanou metodou je přidání prvku na konec pole pomocí funkce append.
testList = ['a', 'b', 'c']
testList.append('d')
print(testList)
Pokud bychom chtěli spojit dva seznamy, může se hodit funkce extend.
toAppendList = ['e', 'f']
testList.extend(toAppendList)
print(testList)
Někdy je také zapotřebí vložit prvek na nějaký konkrétní index. Používá se na to funkce insert, jejíž parametry jsou index a hodnota.
myList = [1,3]
myList.insert(1,2)
print(myList)
Pro odstranění prvku se může hodit funkce remove s parametrem indexu prvku, který chceme odstranit.
myList = [1,2,3]
myList.remove(1)
print(myList)
Obrázek 7 – Pár zajímavých funkcí
Smazání prvku můžeme také provést pomocí funkce del. Tato funkce, ale není vestavěna přímo v seznamu a tudíž se syntaxe mírně liší. Pokud bychom chtěli smazat prvek na konkrétním místě a zároveň ho uložit do proměnné, tak funkce pop je přesně tím, co hledáme. Parametrem je opět index prvku.
intList = [1,2,3,4]
del intList[0]
print(intList)
popedElement = intList.pop(0)
print(popedElement)
Pro zjištění délky seznamu se obvykle používá funkce len.
testList = [1,2,3,4,5,6,7,8,9,10]
print(len(testList))
Obrázek 8 – Pár zajímavých funkcí
Pro spojení seznamů jsme použili funkci extend, ale pokud bychom chtěli dva seznamy uložit jako jeden do třetího, můžeme použít pouze +.
myList = [1,2,3]
concatList = [4,5]
finalList = myList + concatList
print(finalList)
Pokud bychom chtěli jeden seznam umístit několikrát za sebe, může se pro to hodit *. Využití to má při inicializaci větších seznamů.
myList = [0]
print(myList * 10)
Můžeme také snadno zkontrolovat přítomnost nějakého prvku v poli pomocí PRVEK in NÁZEV_SEZNAMU.
myList = ['a','b','c']
print('a' in myList)
print('d' in myList)
Obrázek 9 – Pár zajímavých operátorů
Iterace seznamem:
Pokud potřebujeme projít všechny prvky pole a nechceme uvádět indexy, tak je možné použít následující syntaxi cyklu for, kde se v každém kroku uloží prvek ze seznamu do proměnné element.
myList = ['a', 'b', 'c', 'd']
for element in myList:
print(element)
Obrázek 10 – Iterace seznamem
Závěrem je jen nutné říci, že v tomto návodu bylo pokryto jen pár základních funkcí použitelných v kombinaci se seznamy. Existuje mnoho dalších, které práci se seznamy ještě více usnadní.