Python — List comprehension

Zpět na blog

Python — List comprehension

python list comprehension iterátor

List comprehension umožňuje vytvářet seznamy (list) na základě jiných seznamů nebo iterovatelných objektů pomocí jednoduchého, deklarativního zápisu. Jedná se vlastně o zkrácený zápis smyček for.

Je to užitečná funkce, kterou mnoho programátorů využívá. Díky tomu se tento typ zápisu vyskytuje v mnoha příkladech.

Proto je dobré pochopit, jak list comprehension funguje.

Co je iterovatelný objekt?

V Pythonu se tyto objekty nazývají iterátory. To znamená, že hodnoty se poskytují postupně, jeden po druhém.

Objektem může být např. seznam, řetězec, množina, slovník, a podobně.

Iterátor prochází jednotlivé prvky v posloupnosti tak, aby nemusely být načítány všechny prvky najednou do paměti. To je užitečné pro práci s velkými množství dat, kde není vhodné načítat všechna data naráz.

Základy list comprehension

List comprehension vždy začíná zápisem ve hranatých závorkách. Obsahuje dva klíčové prvky: výraz a for cyklus. Výraz je vyhodnocen pro každý prvek a výsledkem je nový seznam.

To možná zní trochu kostrbatě, ale když se podíváte na příklady, je princip docela jednoduchý. Pro lepší pochopení si vyzkoušíte obě možnosti - použití for smyček a použití list comprehension.

Příklad 1

V tomto příkladu vytvoříte seznamu čísel od 0 do 9. V obou případech bude výsledek stejný. Jen v tom druhém je zápis kratší.

# Smyčka for: Vytvoření seznamu čísel od 0 do 9
cisla = list()
for x in range(10):
  cisla.append(x)
print(cisla)

# List comprehension: Vytvoření seznamu čísel od 0 do 9
cisla = [x for x in range(10)]
print(cisla)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

Příklad 2

Tento krátký kód vygeneruje druhé mocniny. Opět, výsledky jsou stejné, jen druhý zápis je kratší.

# Smyčka for: Seznam druhých mocnin čísel od 0 do 9
mocniny = list()
for x in range(10):
  mocniny.append(x**2)
print(mocniny)

# List comprehension: Seznam druhých mocnin čísel od 0 do 9
squares = [x**2 for x in range(10)]
print(squares) # Output: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]


Příklad 3

List comprehension samozřejmě není omezen jen na práci s čísly. Stejným způsobem fungují i řetězce (stringy).

# Smyčka for: Vytvoření seznamu jednotlivých písmen
vzkaz = "Ahoj světe"
pismena = list()
for pismeno in vzkaz:
  pismena.append(pismeno)
print(pismena)

# List comprehension: Vytvoření seznamu jednotlivých písmen
vzkaz = "Ahoj světe"
pismena = [pismeno for pismeno in vzkaz]
print(pismena)
['A', 'h', 'o', 'j', ' ', 's', 'v', 'ě', 't', 'e']
['A', 'h', 'o', 'j', ' ', 's', 'v', 'ě', 't', 'e']

Použití podmínky

List comprehension může také obsahovat podmínky, které určují, zda bude prvek zahrnut do výsledného seznamu.

Podmínka se umisťuje za výraz v seznamu a odděluje se pomocí klíčového slova if.

V následujícím příkladu si vyzkoušíte jednoduchou podmínku. Python vám samozřejmě umožňuje vytvářet i mnohem komplexnější podmínky.

Následující příklad vybere ze seznamu pouze sudá čísla:

# Smyčka for: výběr pouze sudých čísel
suda_cisla = list()
vsechna_cisla = range(1,11)  # Čísla 1-10
for cislo in vsechna_cisla:
  if cislo % 2 == 0:  # Je číslo dělitelné 2 beze zbytku?
    suda_cisla.append(cislo)
print(suda_cisla)


# List comprehension: výběr pouze sudých čísel
vsechna_cisla = range(1,11)  # Čísla 1-10
suda_cisla = [cislo for cislo in vsechna_cisla if cislo % 2 == 0]  # Je číslo dělitelné 2 beze zbytku?
print(suda_cisla)
[2, 4, 6, 8, 10]
[2, 4, 6, 8, 10]

Délka slov

Pythonu podporuje funkce a proto je můžete používat i pro list comprehension.

Následující příklad načte seznam slov a vrátí seznam jejich délek:

# Smyčka for: Spočítej délku slov (počet znaků)
delky = list()
vsechna_slova = ["lovely", "data", "kurzy", "SQL", "artificial intelligence"]
for slovo in vsechna_slova:
  delky.append(len(slovo))
print(delky)

# List comprehension: Spočítej délku slov (počet znaků)
vsechna_slova = ["lovely", "data", "kurzy", "SQL", "artificial intelligence"]
delky = [len(slovo) for slovo in vsechna_slova]
print(delky)
[6, 4, 5, 3, 23]
[6, 4, 5, 3, 23]

Poznámka: mezera se počítá jako 1 znak

Závěrem

List comprehension je užitečný a elegantní způsob pro manipulaci se seznamy v Pythonu.

V kombinaci s podmínkami umožňuje rychle a snadno filtrovat, mapovat a transformovat data. V praxi se často používá a určitě stojí za to zvládnout minimálně základy.


Líbil se vám článek? Sdílejte ho s ostatními

nebo nám napište něco hezkého. Děkujeme!

Zpět na blog

SQL pro každý den

Jak si užít SQL a nezabloudit v kódu

Zobrazit knihu

SQL pro analytiky

Naučte se základy SQL a relačních databází. Komplexní kurz, který vám dá jistotu při psaní databázových dotazů.

Zobrazit kurz

Pandas - analýza a zpracování dat

Naučte se základy Pandas - pythonovské knihovny, která je standardem pro analýzu a zpracování dat.

Zobrazit kurz

Hledáme další autory

Publikujte na Lovely Blogu a inspirujte ostatní! Sdílením svých znalosti si budujete osobní značku.

Kontaktujte nás

Odběr novinek

Novinky, návody a tipy přímo do vašeho emailu.

Copyright © 2018-2024, Colorbee, s.r.o.

Designed by grafikli.cz in Prague.