Jak filtrovat seznam v Pythonu správným způsobem, jak ze svých dat získat více
V Pythonu je jedním z nejoblíbenějších způsobů ukládání sekvenčních nebo uspořádaných dat pomocí seznamů. Seznam v Pythonu je uspořádaná, měnitelná, vestavěná datová struktura, která se používá k ukládání kolekce dat. Položky uložené v seznamu jsou indexovány od nuly a uživatelé mohou obsah seznamu po jeho vytvoření změnit.
Skutečnost, že položky v seznamu jsou indexovány, umožňuje ukládání duplicitních položek v seznamu. Seznamy v Pythonu mohou také obsahovat prvky různých datových typů. Položky v seznamu jsou odděleny čárkami a uzavřeny v hranatých závorkách.
Zde jsou příklady seznamů v Pythonu:
# A list containing one data type - String colors = ['Red', 'Orange', 'Yellow', 'Green', 'Blue', 'Indigo', 'Violet'] # A list containing multiple data types movies = ['Transformers', 2012, 'Avengers', 300] # A list with duplicate values users = ['John', 'Mary', 'Elizabeth', 'John']
Seznamy jsou velmi univerzální datovou strukturou a s daty uloženými v seznamech můžete provádět mnoho operací. Jednou z běžných a užitečných operací prováděných na seznamech je filtrování dat uložených v seznamu.
Table of Contents
Proč je důležité filtrování seznamů
Filtrování seznamu znamená extrahování konkrétních podmnožin dat, které splňují daná kritéria. Například by nás mohla zajímat pouze sudá čísla v seznamu obsahujícím čísla 1 až 10. Abychom taková data ze seznamu extrahovali, stačí seznam filtrovat a získat čísla, která jsou přesně dělitelná dvěma.
Filtrování je užitečné zejména při manipulaci s daty a analýze dat, protože umožňuje odstraňovat nežádoucí položky ze seznamů, vytvářet nové seznamy obsahující položky splňující daná kritéria a extrahovat data splňující určité podmínky.
Některé aplikace filtrování seznamů v reálném světě zahrnují:
- Ověření dat – Při práci se seznamem můžete chtít pracovat pouze s daty, která splňují daná kritéria. Například v seznamu uživatelů vás mohou zajímat uživatelé s křestním jménem i příjmením. Filtrování vám umožní ověřit a ověřit data v seznamu před jejich zpracováním. Vyhnete se tak práci s daty, která nesplňují vaše požadavky.
- Čištění dat – Vzhledem k tomu, že seznamy mohou ukládat různé typy dat, není vzácné zjistit, že seznamy obsahují nežádoucí data, která vás nezajímají. Například v seznamu obsahujícím názvy vás nemusí zajímat číselné hodnoty seznam. Pomocí filtrování můžete odstranit nežádoucí data.
- Analýza dat – Filtrování dat je zvláště užitečné při analýze dat, protože vám umožňuje zaměřit se na konkrétní podmnožiny dat, což vám umožňuje snadno identifikovat vzorce a trendy. Například v seznamu studentů můžete odfiltrovat studenty a studentky a použít výsledek při analýze dat. Můžete dokonce filtrovat podle věku, umístění a třídy. To vám umožní vyvodit užitečnější závěry z konkrétních podmnožin dat v seznamu
Filtrování seznamů je velmi užitečná funkce, protože vám dává kontrolu nad daty uloženými v seznamu a umožňuje vám pracovat pouze s daty, která vás zajímají.
Cílení na konkrétní podmnožiny dat uložených v seznamu je velmi užitečné, protože zjednodušuje zpracování dat a analýzu dat, díky čemuž jsou procesy lepší, rychlejší a přesnější.
Použití funkce filter().
Funkce filter() je vestavěná funkce Pythonu, kterou lze použít k iteraci přes iterovatelnou položku, jako je seznam, n-tice, množinu nebo slovník, a extrahovat položky v iteraci, které splňují danou podmínku.
Iterovatelný v Pythonu je objekt, který lze procházet jeho prvky jeden po druhém. Iterace přes iterovatelnou vrátí položky v iterovatelné jedné po druhé.
Syntaxe funkce filtru je následující:
filter(function, iterable)
funkce – funkce Pythonu, která obsahuje podmínku filtrování
iterovatelný – iterovatelný, který bude filtrován. V tomto případě použijeme seznam.
Funkce filter() převezme předávanou funkci a aplikuje ji na každou položku v předané iteraci, čímž otestuje podmínku filtrování proti položce. Pokud položka splňuje podmínku, to znamená, že vrací booleovskou hodnotu true, která bude vybrána funkcí filter(). V případě, že podmínku nesplňuje, položka není vybrána.
Funkce filter() vrací iterovatelnou položku s položkami, které splnily podmínku filtrování. Pomocí funkce list() můžete vytvořit nový seznam obsahující položky, které splnily podmínku filtrování.
Chcete-li vidět funkci filter() v akci, zvažte níže uvedený seznam, který je filtrován, aby se vybrala čísla menší než 50:
#A list of numbers numbers = [79, 15, 92, 53, 46, 24, 81, 77, 37, 61] # function containing the filtering condition def is_even(num): if num < 50: return True else: return False # the function list() is used to create a list from the iterable # returned by the filter() function filtered_numbers = list(filter(is_even, numbers)) print(filtered_numbers)
Výše uvedený kód vytiskne následující výsledek:
[15, 46, 24, 37]
Pomocí smyčky for
V Pythonu je smyčka for příkaz toku řízení používaný k iteraci přes sekvenční datové struktury, jako je seznam, n-tice, řetězce a pole. Cyklus for opakovaně provádí blok kódu pro každou položku v sekvenci.
Obecná syntaxe pro smyčku for je následující:
for item in iterable: # Block of code to be executed for each item in the iterabele
item – proměnná představující aktuální položku zpracovávanou v iteraci cyklu
iterable – posloupnost, přes kterou se opakuje cyklus for. V tomto případě seznam
Chcete-li filtrovat seznam pomocí cyklu for, budeme muset předat naši podmínku filtrování v sekci pro provedení bloku kódu. Takto bude každá položka vyhodnocena, zda splňuje danou podmínku.
Když k filtrování seznamu používáte cyklus for, musíte také vytvořit prázdný seznam, kam budete připojovat hodnoty, které vyhovují vaší podmínce filtrování.
Abychom to viděli v akci, vyfiltrujme seznam čísel, abychom získali čísla menší než 50 pomocí cyklu for:
numbers = [79, 15, 92, 53, 46, 24, 81, 77, 37, 61] filtered_numbers = [] for num in numbers: if num < 50: # append() used to add a number that passes the condition # into filtered_numbers. filtered_numbers.append(num) print(filtered_numbers)
Výše uvedený kód vytiskne následující výsledek:
[15, 46, 24, 37]
Pomocí jiného seznamu
Seznam můžete filtrovat pomocí jiného tak, že zkontrolujete, zda se položka v seznamu, který chcete filtrovat, nachází v jiném seznamu. Zvažte například následující dva seznamy
letters = ['a', 'h', 'q', 'd', 's', 'x', 'g', 'j', 'e', 'o', 'k', 'f', 'c', 'b', 'n'] vowels = ['a', 'e', 'i', 'o', 'u']
Ve výše uvedeném seznamu nazvaném písmena můžeme určit, které položky v seznamu nejsou samohlásky, a to tak, že zkontrolujeme, zda se položka vyskytuje v seznamu samohlásek či nikoli. Pokud se položka v seznamu samohlásek neobjeví, nejedná se o samohlásku.
Tímto způsobem můžeme získat všechny znaky v písmenech, které nejsou samohlásky. Chcete-li to provést, spusťte následující kód:
letters = ['a', 'h', 'q', 'd', 's', 'x', 'g', 'j', 'e', 'o', 'k', 'f', 'c', 'b', 'n'] vowels = ['a', 'e', 'i', 'o', 'u'] not_vowel = [] for letter in letters: if letter not in vowels: not_vowel.append(letter) print(not_vowel)
Výše uvedený kód vytiskne následující výstup, který obsahuje znaky v písmenech, které nejsou samohlásky.
['h', 'q', 'd', 's', 'x', 'g', 'j', 'k', 'f', 'c', 'b', 'n']
Používání funkce List Comprehension
V Pythonu nabízí porozumění seznamu kratší, stručnější a čistší syntaxi pro vytváření nového seznamu z existujícího seznamu. Porozumění seznamu má schopnost zredukovat více řádků kódu použitého k vytvoření nového seznamu z jiného seznamu pomocí cyklu for na jeden řádek.
Je to proto, že při použití porozumění seznamu definujete a přidáváte položky do nového seznamu všechny na jednom řádku.
Syntaxe pro pochopení seznamu je následující:
new_list = [expression for element in iterable if condition]
new_list – nový seznam obsahující prvky přidané pomocí přehledu seznamu
výraz – operace, která bude aplikována na každou položku iterovatelné
item – název proměnné představující aktuálně aktivní položku v iteraci
iterovatelný – iterovatelný, ze kterého budou položky vybírány.
if podmínka – volitelná část, kde lze přidat podmínku k filtrování položek, aby se do nově vytvářeného seznamu přidaly pouze ty, které splňují danou podmínku.
Abychom viděli porozumění seznamu v praxi a jak moc to může zjednodušit proces filtrování a vytváření nového seznamu, použijeme seznam písmen a samohlásek k odfiltrování položek v seznamu písmen, které nejsou v seznamu samohlásek. Chcete-li to provést, spusťte následující kód:
letters = ['a', 'h', 'q', 'd', 's', 'x', 'g', 'j', 'e', 'o', 'k', 'f', 'c', 'b', 'n'] vowels = ['a', 'e', 'i', 'o', 'u'] # list comprehension not_vowel = [letter for letter in letters if letter not in vowels] print(not_vowel)
Výstup výše uvedeného kódu je uveden níže:
['h', 'q', 'd', 's', 'x', 'g', 'j', 'k', 'f', 'c', 'b', 'n']
Výstup je podobný předchozímu příkladu, který používal smyčku for k filtrování seznamu pomocí jiného seznamu. K dosažení stejného výsledku však používá méně řádků kódu.
Závěr
Při práci s daty v Pythonu je běžnou operací, kterou musíte provést, filtrování dat z iterovatelného, jako je seznam. Jedná se o velmi užitečný krok v analýze a zpracování dat, protože vám umožňuje pracovat pouze s daty, která jsou relevantní pro prováděnou operaci nebo zpracování.
Velmi oblíbenou sekvenční datovou strukturou v Pythonu je seznam. V případě, že se přistihnete, že pracujete se seznamem a potřebujete jej filtrovat, zvažte použití některé z metod zvýrazněných v článku.
Můžete si také přečíst o tom, jak používat funkce lambda v Pythonu s příklady.