Generátorová notace (zkrácené seznamy, list comprehension)

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ů.

  1. 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]
    
  2. 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.