Otevře se na nové kartě

ESP32 / ESP8266 MicroPython: Použití filtru na seznamy

Cílem tohoto návodu je ukázat, jak lze používat filtry na seznamy. Funkce filtru očekává na vstupu funkci a iterovatelnou proměnnou (v našem případě seznam). Následně použije funkci na každý prvek z dané proměnné. Výstupem filtru je seznam prvků, u kterých námi použitá funkce vrátila true. Ukážeme si to na jednoduchém případě, kdy nás bude zajímat, který prvek je větší než 5. Na vstupu dáme tedy seznam s několika čísly a na výstupu dostaneme seznam čísel, které byly větší než 5.

Nejčastěji se jako vstupní funkce používají lambda funkce nebo funkce anonymní. Jedná se obvykle o kratičké funkce, které jsou definovány přímo při volání funkce. Díky tomu je výsledný kód mnohem přehlednější.

Návod byl vytvářen na deskách ESP32 a ESP8266 v prostředí uPyCraft a MicroPython IDE. O všem jsme již více psali v předchozích návodech.

Lambda:

Nejprve si vytvoříme náš seznam, na který pak budu aplikovat různé operace.
testList = [1,2,3,4,5,6,7,8,9,10]

lambda x: x>5

Nyní můžeme zavolat filtr, který bude mít na vstupu naší proměnnou a lambda výraz. Pro ukázku si vytvoříme jednoduchý výraz, který vrátí logickou hodnotu True/False na základě testu, jestli je proměnná větší než hodnota 5. Jak si můžete z kódu všimnout, není nutné dávat žádnou podmínku, protože výraz x>5 rovnou vrací logický výsledek. Pro ukázku si vypíšeme i typ návratové hodnoty. Jak je možné si všimnout, tak to již není seznam, ale objekt typu filter.

filteredResult = filter(lambda x: x>5 , testList)

print (type(filteredResult))

Velice jednoduše můžeme výsledek proměnit opět v seznam, abychom se nám s ním lépe pracovalo.
finalList = list(filteredResult)

print(finalList)

Na obrázku níže je vidět výstup všech příkazů. Z výsledku je možné si všimnout, že nám funkce filter nevrátila všechny prvky, ale jen ty, které splňují naší podmínku.

Konzole MicroPythonu ukazuje filtrování seznamu a výsledek [6, 7, 8, 9, 10]

Obrázek 1 – Filtrování s lambdou

Stejný výsledek bychom docílili cyklem, který projde všechny prvky a vybere jen ty, které splňují danou podmínku. Tento způsob má nevýhodu v mnohem delším a méně přehledném kódu. Ostatně – zhodnoťte sami.
testList = [1,2,3,4,5,6,7,8,9,10]

finalList = []

filterLambda = lambda x: x>5

for element in testList:

if filterLambda(element):

finalList.append(element)

print (finalList)

Výsledek je ovšem stejný. Viz obr. 2.

Ukázka kódu MicroPythonu filtrujícího seznam a výpisu čísel větších než 5

Obrázek 2 – Filtrace s cyklem

Vlastní funkce:

Místo lambdy můžeme použít také nějakou vlastní funkci. Pro ukázku vytvoříme kód, který dělá opět stejnou operaci. Projde list a vrátí prvky větší než 5. Nejprve si nadefinujeme funkci isGreater, která zkontroluje vstupní hodnotu a vrátí logickou hodnotu.
def isGreater(x):

return x>5

Nyní použijeme velice podobný přístup, jako u lambda výrazu. Zavoláme filtr, ale na vstup mu tentokrát místo lambdy dáme naší funkci.

testList = [1,2,3,4,5,6,7,8,9,10]

filteredList = list(filter(isGreater,testList))

print(filteredList)

Ukázka v MicroPython REPL filtruje seznam čísel na hodnoty větší než pět

Obrázek 3 – Filtrace s vlastní funkcí

Sdílejte článek:
Tričko Chiptron s potiskem Trust me, I'm a maker
Ukaž světu,
že jsi Maker!
Koupit tričko
Kafe pro Chiptrona
Dodej energii dalšímu článku
Buy Me a Coffee

Související články

Terminál ukazuje seznamy čísel a znaků a jejich typ list

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

Schéma nahrávání MicroPythonu do ESP32 přes esptool, PuTTY a Octopus()

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

Různé vývojové desky s čipy ESP32 – srovnání variant

ESP32, S2, S3, C3, C6, H2, C5, P4 i chystaný S31 – který čip vybrat pro váš projekt? Srovnávací tabulka periferií, rozhodovací strom podle use-case, přehled softwarových platforem a tipy, kde koupit vývojové desky v Česku.

Terminál MicroPythonu s funkcí sum a výsledkem 9

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

Schéma zapojení ESP8266 a čtyřkanálového relé pro ovládání čtyř žárovek

Open-source repozitář se stovkou IoT projektů na ESP32, ESP8266 a Raspberry Pi Pico v MicroPythonu. Chytré zavlažování, RFID zámek, detekce plynu, WiFi robot a meteostanice – s kódem i zapojením. Aktualizace: interaktivní přehled projektu. Vyberte si desku a zaměření projektu…

Ilustrace několika elektronických čidel a senzorů, včetně sondy s kovovým hrotem

Tenhle článek vznikl jako přehled čidel, která se na chiptron.cz objevují nejčastěji – v návodech, meteostanicích, projektech kvality vzduchu i DIY bastlení. Pro každé čidlo najdete klíčové parametry, knihovny pro Arduino / ESP32, případně odkaz na ESPHome nebo Home Assistant integraci, tipy,…

Trendy