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

V jazyce Python je znalost seznamů klíčová pro vytváření nových seznamů z existujících iterovatelných objektů, jako jsou seznamy, řetězce a n-tice.

Díky jejich zhuštěné syntaxi můžete vytvářet nové seznamy pomocí jediného řádku kódu. Tento návod vám ukáže, jak na to.

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

  • Jak generovat nový seznam s využitím smyček for,
  • Jaká je syntaxe pro používání seznamů v Pythonu a
  • Jak upravit vytváření seznamů pomocí podmínky if.

Navíc si prakticky procvičíte několik příkladů, které vám pomohou lépe pochopit tvorbu seznamů.

Pojďme na to. 🚀

Tvorba seznamů v Pythonu pomocí smyčky for

Řekněme, že máte seznam čísel pojmenovaný nums. Chcete vytvořit nový seznam, který bude obsahovat třetí mocninu všech čísel v seznamu nums. Zde je postup, jak toho dosáhnout pomocí cyklu for v Pythonu:

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

print(num_cubes)

# Výstup
[8, 27, 125, 343]

Výše uvedený kód se skládá z následujících kroků:

  • Inicializuje se prázdný seznam num_cubes.
  • Prochází se seznam nums.
  • Získá se každé číslo num a vypočítá se jeho krychle pomocí operátoru umocňování: num**3.
  • Nakonec se hodnota krychle přidá do seznamu num_cubes.

Poznámka: V Pythonu se operátor umocňování ** používá ve formátu: num**pow – kde číslo num je umocněno na pow.

Tohle je ale možné zjednodušit pomocí vytváření seznamů v Pythonu. Nyní se seznámíme s jeho syntaxí.

Syntaxe pro vytváření seznamů v Pythonu

Obecná syntaxe pro vytváření seznamů je uvedena níže:

<novy_seznam> = [<vyraz> for <prvek> in <iterovatelny_objekt>]

Pojďme si tuto syntaxi rozebrat:

  • V Pythonu jsou seznamy ohraničeny hranatými závorkami [] – proto musí být i definice vytváření seznamu uzavřena uvnitř [].
  • <prvek> in <iterovatelny_objekt> znamená, že se iteruje přes iterovatelný objekt. Jakýkoli objekt Pythonu, přes který můžete procházet a přistupovat k jednotlivým prvkům – například seznamy, n-tice a řetězce – je iterovatelný.
  • <vyraz> představuje výstup, který se má vypočítat pro každý <prvek> v <iterovatelny_objekt>.

Zní to jednoduše, že?

V podstatě chcete provést nějakou operaci pro všechny prvky v seznamu (nebo jakémkoli iterovatelném objektu), abyste získali nový seznam.

Tím můžeme zjednodušit syntaxi, jak je znázorněno níže.

Syntaxe vytváření seznamu v Pythonu (obrázek od autora)

Nyní, když znáte syntaxi, je čas začít programovat. K procvičování těchto příkladů můžete použít online Python IDE etechblog.cz. Nebo je můžete spustit na vašem počítači.

Příklady vytváření seznamů v Pythonu

V předchozí části jste vytvořili nový seznam num_cubes ze seznamu nums. Začneme tím, že to přepíšeme pomocí vytváření seznamu.

Použití vytváření seznamu s čísly

Nyní použijeme zjednodušenou syntaxi takto:

  • <proved-to>: Zde musíte umocnit každé číslo na třetí mocninu. Nahraďte tedy <proved-to> výrazem num**3.
  • <vsechny-prvky>: Proměnná iterace je num – jednotlivá čísla v seznamu.
  • <tento-seznam>: Stávající seznam, který máme, je nums.
  • A [num**3 for num in nums] je výsledný výraz. ✅

Když to dáme dohromady, máme tento fragment kódu:

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

# Výstup
[8, 27, 125, 343]

Gratuluji, právě jste napsali svůj první kód s využitím vytváření seznamu. 🎉

Pojďme dál a pracujme s řetězci v Pythonu.

Použití vytváření seznamu s řetězci

Řekněme, ž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, že jména autorů ve výše uvedeném seznamu jsou uvedena malými písmeny. Nyní bychom je chtěli naformátovat do formátu názvu a uložit do nového seznamu s názvem author_list.

Poznámka: V Pythonu metoda řetězce title() přijme řetězec jako argument a vrátí jeho kopii formátovanou dle 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:

  • Projděte seznam authors a pro každého autora v seznamu
  • Zavolejte metodu author.title() pro získání kopie řetězce s velkými písmeny v názvu.

A zde je kód Pythonu, který toho dosáhne:

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

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

# Výstup
['Jane Austen', 'George Orwell', 'James Clear', 'Cal Newport']

Všimněte si, že ve výše uvedeném výstupu jsou jména všech autorů formátována s velkými písmeny na začátku každého slova – přesně to jsme chtěli.

Použití vytváření seznamu s více seznamy

Zatím jste se naučili, jak používat vytváření seznamů pro 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 nový seznam area, který bude obsahovat plochy těchto 4 obdélníků. Pamatujte, že 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 to můžete 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). Poté vrátí iterátor n-tic, kde n-tice i obsahuje prvek i z každého z iterovatelných.

Následující obrázek to podrobně ilustruje. 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)

# Výstup
[8, 5, 7, 27]

V následující části se naučíte, jak používat podmíněné příkazy při vytváření seznamu.

Vytváření seznamů v Pythonu s podmínkou

Začněme tím, že navážeme na předchozí syntaxi pro vytváření seznamů.

Zde je syntaxe:

<novy_seznam> = [<vyraz> for <prvek> in <iterovatelny_objekt> if <podminka>]

Namísto výpočtu <vyraz> pro všechny prvky, chcete to provést pouze pro ty prvky, které splňují určitou <podminku> — kde, podmínka := True. A to vede ke zjednodušené syntaxi, jak je znázorněno:

Vytváření seznamů v Pythonu se syntaxí podmínky (obrázek od autora)

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

Vytváření seznamů v Pythonu s příklady podmínek

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

V Pythonu <znak>.isdigit() aplikované na <znak> vrátí True, pokud je to číslice (0-9); jinak vrátí False.

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

str1 = "Učím se Python v roce 2022"

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

print(digits)

# Výstup
['2', '0', '2', '2']

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

  • Procházíte řetězcem str1,
  • Přistupujete ke každému znaku a ověřujete, zda je číslice pomocí metody isdigit() a
  • Přidáte znak do nového seznamu digits pouze v případě, že je to číslice.

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

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

<str>.startswith('znak') vrací True, pokud <str> začíná na 'znak'; jinak vrátí False.

fruits = ['borůvka','jablko','banán','pomeranč','třešeň']

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

print(starts_with_b)

# Výstup
['borůvka', 'banán']

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

A tím končí naše povídání o vytváření seznamů.

Závěr

Doufám, že vám tento návod pomohl pochopit, jak se vytváří seznamy v Pythonu.

Pojďme si to shrnout:

  • Můžete použít [<proved-to> for <vsechny-prvky> in <tento-seznam>] pro vytvoření nového seznamu pomocí vytváření seznamu.
  • Navíc můžete použít syntaxi [<proved-to> for <vsechny-prvky> in <tento-seznam> if <podminka-je-True>] s podmíněným příkazem if.

Kromě toho jste si procvičili několik příkladů. Jako další krok si můžete zkusit přepsat některé z vašich stávajících smyček Pythonu pro vytváření seznamů pomocí vytváření seznamu. Přeji vám příjemné programování! A těším se na vás v dalším návodu. 😄

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