Sdílejte chiptron.cz na sociálních sítích



RSS feeds

ESP32 / ESP8266 MicroPython: Práce se seznamyTisk

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

Upozornění

Administrátor těchto stránek ani autor článků neručí za správnost a funkčnost zde uvedených materiálů.
Administrátor těchto stránek se zříká jakékoli odpovědnosti za případné ublížení na zdraví či poškození nebo zničení majetku v důsledku elektrického proudu, chybnosti schémat nebo i teoretické výuky. Je zakázané používat zařízení, která jsou v rozporu s právními předpisy ČR či EU.
Předkládané informace a zapojení jsou zveřejněny bez ohledu na případné patenty třetích osob. Nároky na odškodnění na základě změn, chyb nebo vynechání jsou zásadně vyloučeny. Všechny registrované nebo jiné obchodní známky zde použité jsou majetkem jejich vlastníků. Uvedením nejsou zpochybněna z toho vyplývající vlastnická práva.
Nezodpovídáme za pravost předkládaných materiálů třetími osobami a jejich původ.
10,094,451 návštěv