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.

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

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

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

Slyšíme to dnes a denně, zejména před volbami, „chceme učenou společnost“, „chceme tu vytvářet světové know-how“. Naučit se ale logicky či kriticky myslet a naučit se pracovat s chybou není samozřejmost nám od narození daná. Musíme se je učit a…

Trendy