15. Generátorová notace (zkrácené seznamy, list comprehension)#
15.1. Teorie#
Generátorová notace (zkrácené seznamy, list comprehension) je mocným nástrojem v jazyce Python pro vytváření nových seznamů na základě existujících seznamů nebo jiných iterovatelných objektů. Jedná se o kompaktní a elegantní způsob, jak provádět transformace a filtrování dat.
Syntaxe je následující:
novy_seznam = [vyraz for prvek in iterovatelny_objekt]
novy_seznam = [vyraz for prvek in iterovatelny_objekt if podminka]
Význam jednotlivých částí:
vyraz
je výraz, který se vyhodnotí pro každý prvek v iterovatelném objektu.prvek
je proměnná, která představuje jednotlivé prvky iterovatelného objektu.iterovatelny_objekt
je seznam, n-tice, řetězec nebo jakýkoliv jiný iterovatelný objekt, přes který se bude iterovat.podminka
je podmínka, která musí být splněna, aby byl prvek zařazen do seznamu.
Pomocí generátorové notace můžete provádět různé operace, jako je transformace nebo filtrování seznamů.
Transformace prvků: Můžete aplikovat určitou transformaci na každý prvek a vytvořit nový seznam. Například:
cisla = [1, 2, 3, 4, 5] nasobky = [cislo * 2 for cislo in cisla] # Výsledek: [2, 4, 6, 8, 10]
Filtrace prvků: Můžete filtrovat prvky na základě určité podmínky a vytvořit nový seznam obsahující pouze prvky splňující tuto podmínku. V tomto případě je podmínka na konci seznamu. Například následovně (operátor
%2
udává zbytek po dělení číslem 2 a test na nulovost tohoto zbytku je vlastně testem na sudost čísla).cisla = [1, 2, 3, 4, 5] suda_cisla = [cislo for cislo in cisla if cislo % 2 == 0] # Výsledek: [2, 4]
Generátorová notace je mocným nástrojem, který umožňuje efektivní manipulaci s daty a zkrácení kódu. Je v Pythonu široce používána a umožňuje vám elegantně a čitelně zpracovávat seznamy a jiné iterovatelné objekty.
15.2. Úkol#
Úkolem je vybrat ze seznamu velikost_populace
jenom hodnoty větší než 100
a uložit je do proměnné populace_nadlimitni
.
Následující kód řeší úlohu pomocí cyklu a podmínky.
Napište ekvivalentní kód použitím generátorové notace. Tento přístup umožní vše napsat na jeden řádek.