ESP32 / ESP8266 MicroPython: Práce se seznamy

Níže uvedený článek je článek přeložený ze stránek dfrobot.com.

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

Sdílejte článek:

Související články

Toto je první díl ze tří – úvodního kurzu Micropython na ESP32.

– ROBOTboard (HW) – Octopus open source knihovny (FW) – Nastavení zařízení a periferií – ds: device setting > pinouts – ios: input-output setup – Upgrade systému – Displeje – Tlačítka – Mechatronika – Čidla a vstupy – Shrnutí V…

– Změny v Micropythonu si vynucují změnu octopus() – Opakování a podrobnější doplnění – LED – nejjednodušší knihovna pro testování – web_server() – Webový editor IDE (integrated development environment) – Některé další vychytávky – Drobné projekty – examples V minulých…

V Octopus LAB (sledujte nás na FB) jsme se poslední dobou hodně soustředili na ESP32 ve spojení s Micropythonem.

Níže uvedený článek je článek přeložený ze stránek dfrobot.