Porozumění seznamu v Pythonu – s příklady

V Pythonu vám pochopení seznamů pomáhá vytvářet nové seznamy z existujících iterovatelných položek, jako jsou seznamy, řetězce a n-tice.

Jejich stručná syntaxe vám umožňuje vytvářet nové seznamy v jediném řádku kódu. A tento tutoriál vás naučí, jak to můžete udělat.

Během několika následujících minut se dozvíte:

  • Jak vytvořit nový seznam pomocí smyček for,
  • Syntaxe pro použití seznamů v Pythonu a
  • Jak upravit porozumění seznamu pomocí podmíněného příkazu if.

Kromě toho také zakódujete několik příkladů, které vám pomohou lépe porozumět porozumění seznamu.

Pojďme se ponořit.🌊

Jak vytvořit seznamy Pythonu pomocí pro smyčky

Předpokládejme, že máte v seznamu počet čísel num. A chtěli byste vytvořit další seznam, který bude obsahovat třetí mocninu všech čísel v číslech. Zde je návod, jak to udělat pomocí cyklu for v Pythonu:

nums = [2,3,5,7]
num_cubes = []
for num in nums:
  num_cubes.append(num**3)

print(num_cubes)

# Output
[8, 27, 125, 343]

Ve výše uvedeném kódu máme následující kroky:

  • Inicializujte prázdný seznam num_cubes.
  • Procházejte seznam čísel.
  • Přistupte ke každému číslu num a vypočítejte jeho krychli pomocí operátoru umocňování: num**3.
  • Nakonec přidejte hodnotu cubed do seznamu num_cubes

Poznámka: V Pythonu se operátor umocňování ** používá se syntaxí: num**pow – číslo num je zvýšeno na mocninu pow.

Můžete to však udělat snadněji pomocí porozumění seznamu v Pythonu. Pojďme se naučit jeho syntaxi.

Python List Comprehension Syntaxe

Obecná syntaxe pro porozumění seznamu je uvedena níže.

<new_list> = [<expression> for <item> in <iterable>]

Pojďme analyzovat výše uvedenou syntaxi.

  • V Pythonu jsou seznamy odděleny dvojicí hranatých závorek []—proto musíte prohlášení o porozumění seznamu přiložit dovnitř [].
  • v znamená, že procházíte iterovatelnou smyčkou. Jakýkoli objekt Pythonu, přes který můžete procházet a přistupovat k jednotlivým položkám – jako jsou seznamy, n-tice a řetězce, jsou iterovatelné.
  • je výstup, který byste chtěli vypočítat pro každou v .

A to zní jednoduše, že?

V podstatě byste chtěli udělat něco pro všechny položky v seznamu (nebo jakékoli iterovatelné), abyste získali nový seznam.

Pomocí toho můžeme zjednodušit syntaxi, jak je znázorněno na obrázku níže.

Syntaxe porozumění seznamu Python (obrázek od autora)

Nyní, když jste se naučili syntaxi, je čas začít kódovat. K následování těchto příkladů můžete použít online Python IDE etechblog.cz. Nebo je můžete spustit na místním počítači.

Příklady porozumění seznamu v Pythonu

V předchozí části jste vytvořili nový seznam num_cubes z nums. Začněme tím, že to přepíšeme pomocí porozumění seznamu.

Použití porozumění seznamu s čísly

Nyní použijeme zjednodušenou syntaxi takto:

  • : Zde musíte dát krychli každé číslo. Takže nahraďte číslem**3.
  • : Proměnná opakování je num – jednotlivá čísla v seznamu.
  • : Stávající seznam, který máme, je nums.
  • A [num**3 for num in nums] je konečný výraz. ✅

Když to dáme dohromady, máme následující fragment kódu:

num_cubes = [num**3 for num in nums]
print(num_cubes)

# Output
[8, 27, 125, 343]

Gratulujeme, zakódovali jste své první porozumění seznamu.🎉

Pojďme dále, pojďme pracovat s řetězci Python.

Použití funkce List Comprehension with Strings

Předpokládejme, že máte seznam autorů — níže uvedený seznam můžete přepsat svými oblíbenými autory.😄

authors = ["jane austen","george orwell","james clear","cal newport"]

Všimněte si, jak jsou jména autorů ve výše uvedeném seznamu uvedena malými písmeny. Nyní bychom je chtěli naformátovat v případě názvu a uložit je do nového seznamu s názvem author_list.

Poznámka: V Pythonu metoda řetězce titul() přijme řetězec jako argument a vrátí kopii řetězce formátovanou podle velikosti písmen. To znamená, že první písmeno každého slova je velké: Jméno Příjmení

Zde je vše, co musíte udělat:

  • procházet seznam autorů a pro každého autora v seznamu,
  • voláním author.title() získáte kopii řetězce s malými písmeny v názvu.

A kód Pythonu pro to je uveden níže:

authors = ["jane austen","george orwell","james clear","cal newport"]

author_list = [author.title() for author in authors]
print(author_list)

# Output
['Jane Austen', 'George Orwell', 'James Clear', 'Cal Newport']

Ve výše uvedeném výstupu sledujte, jak byla jména všech autorů formátována v případě názvu – což jsme chtěli.

Použití porozumění seznamu s více seznamy

Zatím jste se naučili, jak používat porozumění seznamu k vytváření nových seznamů z jednoho existujícího seznamu. Nyní se naučíme, jak vytvořit nový seznam z více seznamů.

Zvažte například tento problém: Máte dva seznamy l_arr a b_arr obsahující délky a šířky 4 obdélníků.

A musíte vytvořit novou oblast seznamu, která zahrnuje oblast těchto 4 obdélníků. Pamatujte, plocha = délka * šířka.

l_arr = [4,5,1,3]
b_arr = [2,1,7,9]

K výpočtu plochy budete potřebovat prvky z obou seznamů (l_arr a b_arr). A můžete to udělat pomocí funkce zip() Pythonu.

Poznámka: V Pythonu funkce zip() přijímá jeden nebo více iterovatelných argumentů se syntaxí zip(*iterables). Potom vrátí iterátor n-tic, kde n-tice i obsahuje prvek i z každé z iterovatelných.

Následující obrázek to podrobně popisuje. V l_arr a b_arr máte 4 hodnoty, takže rozsah indexů je od 0 do 3. Jak vidíte, n-tice 0 obsahuje l_arr[0] a b_arr[0]n-tice 1 obsahuje l_arr[1] a b_arr[1]a tak dále.

Funkce Python zip() (Obrázek od autora)

Proto můžete procházet zip(l_arr,b_arr), jak je znázorněno níže:

area = [l*b for l,b in zip(l_arr,b_arr)]
print(area)

# Output
[8,5,7,27]

V další části se dozvíte, jak používat podmíněné příkazy v porozumění seznamu.

Porozumění seznamu v Pythonu se syntaxí podmínky

Začněme tím, že budeme stavět na předchozí syntaxi pro porozumění seznamu.

Zde je syntaxe:

<new_list> = [<expression> for <item> in <iterable> if <condition>]

Namísto výpočtu pro všechny položky byste to chtěli provést pouze pro ty položky, které splňují konkrétní — kde, podmínka := True. A to vede ke zjednodušené syntaxi, jak je znázorněno:

Porozumění seznamu v Pythonu se syntaxí podmínky (obrázek od autora)

▶ S tím přejdeme k příkladům kódu.

Porozumění seznamu v Pythonu s příklady podmínek

#1. Dostanete řetězec „Učím se Python v roce 2022“. Chcete získat seznam všech číslic v tomto řetězci. Jak to tedy děláte?

V Pythonu .isdigit() působí na znak a vrací True, pokud je to číslice (0-9); jinak vrátí False.

Níže uvedený fragment kódu ukazuje, jak můžete shromáždit seznam všech číslic v řetězci str1.

str1 = "I'm learning Python3 in 2022"

digits = [char for char in str1 if char.isdigit()]

print(digits)

# Output
['3', '2', '0', '2', '2']

Ve výše uvedeném kódu:

  • procházíte řetězcem str1,
  • přistupte ke každému znaku a zkontrolujte, zda se jedná o číslici pomocí metody isdigit() a
  • přidat znak do nového seznamu číslic pouze v případě, že se jedná o číslici.

Vezměme si další příklad.

#2. Máte seznam ovoce.🍊 A chtěli byste vytvořit seznam začíná_s_b, který bude obsahovat všechny druhy ovoce ze seznamu ovoce, které začínají na b. K zápisu podmínky můžete použít metodu beginwith().

.startswith(‚char‘) vrací True, pokud začíná na ‚char‘; jinak vrátí False.

fruits = ['blueberry','apple','banana','orange','cherry']

starts_with_b = [fruit for fruit in fruits if fruit.startswith('b')]

print(starts_with_b)

# Output
['blueberry', 'banana']

Ve výše uvedeném výstupu dostaneme ‚borůvka‘ a ‚banán‘, což jsou dvě ovoce, která začínají na ‚b‘ v seznamu ovoce, jak jsme očekávali.

A tím končí naše diskuse o porozumění seznamu.

Závěr

Doufám, že vám tento tutoriál pomohl porozumět pochopení seznamu v Pythonu.

Pojďme si to shrnout:

  • Můžeš použít [<do this> for <all-items> in <this-list>] vytvořit nový seznam pomocí porozumění seznamu.
  • Navíc můžete použít syntaxi [<do this> for <all-items> in <this-list> if <condition-is-True>] s podmíněným příkazem if.

Kromě toho jste také kódovali několik příkladů. Jako další krok můžete zkusit přepsat některé z vašich stávajících smyček Pythonu pro vytváření seznamů pomocí porozumění seznamu. Šťastné kódování! Do dalšího tutoriálu.😄

Nyní se můžete podívat na to, jak převést seznam na slovník, nebo se naučit, jak zacházet se soubory v Pythonu.