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.

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.

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)

Obrázek 3 – Filtrace s vlastní funkcí

Sdílejte článek:
Ukaž světu,
že jsi Maker!
Koupit tričko
Kafe pro Chiptrona
Dodej energii dalšímu článku

Související články

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

Švýcarská společnost Schurter nabízí EMC filtry, proudově kompenzované tlumivky jakož i filtry integrované se zásuvkou, vypínačem a pojistkou.

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

– 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…

Trendy