Tahle kapitola je plná nových věcí. Doufám, že vydržíš až do konce. A kdyby něco zatím nedávalo úplně smysl, nevěš hlavu: věci, které si teď vysvětlíme, se opravdu naučíš až v dalších lekcích, kde je budeme využívat prakticky.

Encyklopedické informace z této stránky shrnuje Tahák na seznamy, který si doporučuji vytisknout.

Každý příklad v tomto textu si vyzkoušej; to, co Python vypíše, je důležitá součást lekce, i když v materiálech není přímo napsaná.

Seznamy

Dnes si ukážeme, jak pracovat se seznamy (angl. lists). Doufám, že víš, kde máš na klávesnici hranaté závorky, protože právě těmi se seznamy vytváří:

cisla = [1, 1, 2, 3, 5, 8, 13]
print(cisla)

Nemůžeš najít hranaté závorky? Na české klávesnici zkus pravý Alt + F a G.

Seznam je hodnota, která může obsahovat spoustu dalších hodnot. Tak jako řetězec obsahuje sekvenci znaků, seznam obsahuje sekvenci... čehokoliv. Třeba čísel. A tak jako můžeme pomocí cyklu for procházet řetězec po znacích, seznam můžeme procházet po jednotlivých prvcích:

for cislo in cisla:
    print(cislo)

Seznamy se v programech vyskytují velice často: soubor se dá načíst jako seznam řetězců s jednotlivými řádky, seznam řetězců jako '7♥' a 'K♣' může posloužit jako balíček karet, matematika je plná číselných řad, každá online služba má seznam uživatelů.

Hodnoty v seznamu můžou být jakéhokoli typu, dokonce můžeme různé typy míchat v jednom seznamu (i když s takovými namixovanými seznamy se příliš často nesetkáme – více se používají v n-ticích, o kterých si povíme později):

seznam = [1, 'abc', True, None, range(10), len]
print(seznam)

Vybírání ze seznamů

Nejzákladnější operaci se seznamy, cyklus for, už jsme si ukázaly. Druhá nejdůležitější operace je vybírání jednotlivých prvků. To funguje jako u řetězců: do hranatých závorek se dá číslo prvku. Čísluje se, jako u řetězců, od nuly; záporná čísla označují prvky od konce.

print(cisla[2])

Hranatými závorkami můžeme získávat podseznamy. Diagram z materiálů k řetězcům ukazuje, jak u takového „sekání” číslovat: funguje to stejně, jen místo menšího řetězce dostaneme menší seznam.

print(cisla[2:-3])

Měnění seznamů

Důležitá vlastnost seznamů, kterou nemají ani čísla, ani řetězce (a True/False/None už vůbec ne), je, že seznamy se dají měnit.

Čísla měnit nejdou – máš-li a = 3 a napíšeš a = a + 1, číslo 3 se nezmění. Vypočítá se nové číslo 4 a proměnná a se nastaví na toto nové číslo.

Oproti tomu seznamy se dají měnit bez nastavování proměnné. Základní způsob, jak změnit seznam, je přidání prvku na konec pomocí metody append. Ta nic nevrací (resp. vrací None), ale „na místě” (angl. in place) změní seznam, na kterém pracuje. Vyzkoušej si to:

prvocisla = [2, 3, 5, 7, 11, 13, 17]
print(prvocisla)
prvocisla.append(19)
print(prvocisla)

Takové měnění hodnoty může být občas překvapující, protože stejnou hodnotu může mít více proměnných. Protože se mění hodnota samotná, může to vypadat, že se proměnná „mění aniž na ni sáhneme”:

a = [1, 2, 3]   # vytvoření seznamu
b = a           # tady se nový seznam nevytváří

# seznam vytvořený v prvním řádku má teď dvě jména: "a" a "b",
# ale stále pracujeme jenom s jedním seznamem

print(b)
a.append(4)
print(b)

Další způsoby, jak měnit seznamy

Kromě metody append, která přidává jediný prvek, existuje metoda extend, která umí přidávat prvků víc. Prvky k přidání jí předáme ve formě seznamu:

dalsi_prvocisla = [23, 29, 31]
prvocisla.extend(dalsi_prvocisla)
print(prvocisla)

Metoda extend umí pracovat i s jinými typy než se seznamy – ráda zpracuje cokoli, přes co umí cyklit for: např. jednotlivé znaky řetězců, řádky souborů, nebo čísla z range().

seznam = []
seznam.extend('abcdef')
seznam.extend(range(10))
print(seznam)

Měnění prvků

Ale dost přidávání. Seznamům se dají i měnit jednotlivé prvky a to jednoduše tak, že do prvku přiřadíme, jako by to byla proměnná:

cisla = [1, 0, 3, 4]
cisla[1] = 2
print(cisla)

Přiřazovat se dá i do podseznamu – v tomto případě se podseznam nahradí jednotlivými prvky z toho, co přiřazujeme. Jako u extend můžeš do podseznamu opět přiřadit cokoli, co umí zpracovat for – seznam, řetězec, range() apod.

cisla = [1, 2, 3, 4]
cisla[1:-1] = [6, 5]
print(cisla)

Mazání prvků

Přiřazením do podseznamu se dá i změnit délka seznamu, nebo některé prvky úplně odstranit:

cisla = [1, 2, 3, 4]
cisla[1:-1] = [0, 0, 0, 0, 0, 0]
print(cisla)
cisla[1:-1] = []
print(cisla)

Tenhle zápis pro mazání prvků je ale docela nepřehledný, a proto na to máme zvláštní příkaz jménem del. Jak už jeho název (z angl. delete, smazat) napovídá, smaže, co mu přijde pod ruku – jednotlivé prvky seznamů, podseznamy, … a dokonce i proměnné!

cisla = [1, 2, 3, 4, 5, 6]
del cisla[-1]
print(cisla)
del cisla[3:5]
print(cisla)
del cisla
print(cisla)

Další mazací metody jsou:

  • pop, která odstraní a vrátí poslední prvek v seznamu – například pokud mám seznam karet v balíčku, jde takhle jednoduše „líznout” kartu,
  • remove, která najde v seznamu daný prvek a odstraní ho,
  • clear, která vyprázdní celý seznam.
cisla = [1, 2, 3, 'abc', 4, 5, 6, 12]
posledni = cisla.pop()
print(posledni)
print(cisla)

cisla.remove('abc')
print(cisla)

cisla.clear()
print(cisla)

Řazení

A taky tu máme metodu sort, která prvky seznamu seřadí.

seznam = [4, 7, 8, 3, 5, 2, 4, 8, 5]
seznam.sort()
print(seznam)

Aby se daly seřadit, musí být prvky seznamu vzájemně porovnatelné – konktrétně na ně musí fungovat operátor <. Seznam s mixem čísel a řetězců tedy seřadit nepůjde. Operátor < definuje i jak přesně se řadí (např. čísla podle velikosti; řetězce podle speciální „abecedy” která řadí velká písmena za malá, česká až za anglická, atd.).

Metoda sort zná pojmenovaný argument reverse. Pokud ho nastavíš na True, řadí se „naopak”.

seznam = [4, 7, 8, 3, 5, 2, 4, 8, 5]
seznam.sort(reverse=True)
print(seznam)

Známé operace se seznamy

Spousta toho, co můžeme dělat s řetězci, má stejný účinek i u seznamů. Třeba sečítání a násobení číslem:

melodie = ['C', 'E', 'G'] * 2 + ['E', 'E', 'D', 'E', 'F', 'D'] * 2 + ['E', 'D', 'C']
print(melodie)

Stejně jako u řetězců, sečítat jde jen seznam se seznamem – ne třeba seznam s řetězcem.

Další staří známí jsou funkce len, metody count a index, a operátor in.

print(len(melodie))         # Délka seznamu
print(melodie.count('D'))   # Počet 'D' v seznamu
print(melodie.index('D'))   # Číslo prvního 'D'
print('D' in melodie)       # Je 'D' v seznamu?

Poslední tři se ale přece jen chovají kapku jinak: u řetězců pracují s podřetězci, u seznamů jen s jednotlivými prvky. Takže ačkoliv naše melodie obsahuje prvky 'D' a 'E' vedle sebe, 'DE' v seznamu není:

print('DE' in melodie)
print(melodie.count('DE'))
print(melodie.index('DE'))

Seznam jako podmínka

Seznam se dá použít v příkazu if (nebo while) jako podmínka, která platí, když v tom seznamu něco je. Jinými slovy, seznam je tu „zkratka“ pro len(seznam) > 0.

if seznam:
    print('V seznamu něco je!')
else:
    print('Seznam je prázdný!')

Podobně se dají v podmínce použít i řetězce. A dokonce i čísla – ta jako podmínka platí, pokud jsou nenulová.

Tvoření seznamů

Tak jako funkce int převádí na celá čísla a str na řetězce, funkce list (angl. seznam) převádí na seznam. Jako argument jí předáme jakoukoli hodnotu, kterou umí zpracovat příkaz for. Z řetězců udělá seznam znaků, z otevřeného souboru udělá seznam řádků, z range udělá seznam čísel.

abeceda = list('abcdefghijklmnopqrstuvwxyz')
cisla = list(range(100))
print(abeceda)
print(cisla)

I ze seznamu udělá funkce list seznam. To může znít zbytečně, ale není – vytvoří se totiž nový seznam. Bude mít sice stejné prvky ve stejném pořadí, ale nebude to ten samý seznam: měnit se bude nezávisle na tom starém.

a = [1, 2, 3]
b = list(a)

print(b)
a.append(4)
print(b)

Další způsob, jak tvořit seznamy (zvláště složitější), je nejdřív udělat prázdný seznam a pak ho postupně naplnit pomocí funkce append. Třeba pokud z nějakého důvodu chceš seznam mocnin dvou, projdi čísla, kterými chceme mocnit, cyklem for a pro každé z nich do seznamu přidej příslušnou mocninu:

mocniny_dvou = []
for cislo in range(10):
    mocniny_dvou.append(2 ** cislo)
print(mocniny_dvou)

Chceš-li seznam, který reprezentuje balíček karet, zavolej append pro všechny kombinace barev a hodnot.

balicek = []
for barva in '♠', '♥', '♦', '♣':  # (Na Windows použij textová jména)
    for hodnota in list(range(2, 11)) + ['J', 'Q', 'K', 'A']:
        balicek.append(str(hodnota) + barva)
print(balicek)

Seznamy a řetězce

Seznamy a řetězce jsou druhy „sekvencí”, takže snad nepřekvapí, že se dá různě převádět z jednoho typu na druhý. Funkce list vytvoří z řetězce seznam znaků. Když chceme dostat seznam slov, použijeme na řetězci metodu split (angl. rozdělit):

slova = 'Tato věta je složitá, rozdělme ji na slova!'.split()
print(slova)

Metoda split umí brát i argument. Pokud ho předáme, místo mezer (a nových řádků) se řetězec „rozseká” daným oddělovačem. Takže když máme nějaká data oddělená čárkami, není nic jednoduššího než použít split s čárkou:

zaznamy = '3A,8B,2E,9D'.split(',')
print(zaznamy)

Chceme-li spojit seznam řetězců zase dohromady do jediného řetězce, použijeme metodu join (angl. spojit). Pozor, tahle metoda se volá na oddělovači, tedy řetězci, kterým se jednotlivé kousky „slepí” dohromady; a jako argument bere seznam jednotlivých řetězců.

veta = ' '.join(slova)
print(veta)

Úkol

Představ si, že ti uživatelé zadávají jména a příjmení a ty si je ukládáš do seznamu pro další použití např. v evidenci studentů. Ne všichni jsou ale pořádní, a tak se v seznamu sem tam objeví i jméno s nesprávně zadanými velkými písmeny. Například:

zaznamy = ['pepa novák', 'Jiří Sládek', 'Ivo navrátil', 'jan Poledník']

Úkolem je:

  • Napsat funkci, která vybere jen ty správně zadané záznamy, které mají správně jméno i příjmení s velkým počátečním písmenem.
  • Napsat funkci, která vybere naopak jen ty nesprávně zadané záznamy.
  • (Nepovinný) – Napsat funkci, která vrátí seznam s opravenými záznamy.

Výsledné funkce by měly fungovat takto:

zaznamy = ['pepa novák', 'Jiří Sládek', 'Ivo navrátil', 'jan Poledník']

chybne_zaznamy = vyber_chybne(zaznamy)
print(chybne_zaznamy) # → ['pepa novák', 'Ivo navrátil', 'jan Poledník']

spravne_zaznamy = vyber_spravne(zaznamy)
print(spravne_zaznamy) # → ['Jiří Sládek']

opravene_zaznamy = oprav_zaznamy(zaznamy)
print(opravene_zaznamy) # → ['Pepa Novák', 'Jiří Sládek', 'Ivo Navrátil', 'Jan Poledník']

Snadný způsob jak zjistit, zda je řetězec složen jen z malých písmen, je metoda islower(), která vrací True, pokud řetězec obsahuje jen malá písmena, jinak vrací False. Například 'abc'.islower() == True ale 'aBc'.islower() == False.

Snadný způsob jak převést první písmenko na velké je metoda capitalize(): např. 'abc'.capitalize() == 'Abc'

Řešení

Seznamy a náhoda

Modul random obsahuje dvě funkce, které se hodí k seznamům. Jako random.randrange, obě mají něco společného s náhodou.

Funkce shuffle seznam „zamíchá” – všechny prvky náhodně popřehází. Jako metoda sort i funkce shuffle nic nevrací.

import random

balicek = []
for barva in '♠', '♥', '♦', '♣':
    for hodnota in list(range(2, 11)) + ['J', 'Q', 'K', 'A']:
        balicek.append(str(hodnota) + barva)
print(balicek)

random.shuffle(balicek)
print(balicek)

A funkce choice ze seznamu vybere jeden náhodný prvek. S použitím seznamu tak můžeme výrazně zjednodušit úvodní část naší staré hry kámen/nůžky/papír:

import random
mozne_tahy = ['kámen', 'nůžky', 'papír']
tah_pocitace = random.choice(mozne_tahy)

Vnořené seznamy

A perlička na konec! Na začátku tohoto textu je napsáno, že seznam může obsahovat jakýkoli typ hodnot. Může třeba obsahovat i další seznamy:

seznam_seznamu = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Takový seznam se chová docela normálně – jdou z něj třeba brát jednotlivé prvky (které jsou ovšem taky seznamy):

prvni_seznam = seznam_seznamu[0]
print(prvni_seznam)

A protože jsou prvky samy seznamy, můžeme mluvit o věcech jako „první prvek druhého seznamu”:

druhy_seznam = seznam_seznamu[1]
prvni_prvek_druheho_seznamu = druhy_seznam[0]
print(prvni_prvek_druheho_seznamu)

A protože výraz seznam_seznamu[1] označuje seznam, můžeme brát prvky přímo z něj:

prvni_prvek_druheho_seznamu = (seznam_seznamu[1])[0]

Neboli:

prvni_prvek_druheho_seznamu = seznam_seznamu[1][0]

A má tahle věc nějaké použití, ptáš se? Stejně jako vnořené cykly for nám umožnily vypsat tabulku, vnořené seznamy nám umožní si tabulku „zapamatovat”.

def vytvor_tabulku(velikost=11):
    seznam_radku = []
    for a in range(velikost):
        radek = []
        for b in range(velikost):
            radek.append(a * b)
        seznam_radku.append(radek)
    return seznam_radku

nasobilka = vytvor_tabulku()

print(nasobilka[2][3])  # dva krát tři
print(nasobilka[5][2])  # pět krát dva
print(nasobilka[8][7])  # osm krát sedm

# Vypsání celé tabulky
for radek in nasobilka:
    for cislo in radek:
        print(cislo, end=' ')
    print()

Co s takovou „zapamatovanou” tabulkou? Můžeš si do ní uložit třeba pozice figurek na šachovnici nebo křížků a koleček ve 2D piškvorkách.

{
  "data": {
    "sessionMaterial": {
      "id": "session-material:2018/czechitas-ostrava-jaro:def-str-list:3",
      "title": "Seznamy",
      "html": "\n          \n    \n\n    <p>Tahle kapitola je pln&#xE1; nov&#xFD;ch v&#x11B;c&#xED;.\nDouf&#xE1;m, &#x17E;e vydr&#x17E;&#xED;&#x161; a&#x17E; do konce. A kdyby n&#x11B;co\nzat&#xED;m ned&#xE1;valo &#xFA;pln&#x11B; smysl, nev&#x11B;&#x161; hlavu:\nv&#x11B;ci, kter&#xE9; si te&#x10F; vysv&#x11B;tl&#xED;me, se opravdu nau&#x10D;&#xED;&#x161;\na&#x17E; v dal&#x161;&#xED;ch lekc&#xED;ch, kde je budeme vyu&#x17E;&#xED;vat\nprakticky.</p>\n<p>Encyklopedick&#xE9; informace z t&#xE9;to str&#xE1;nky shrnuje\n<a href=\"https://github.com/pyvec/cheatsheets/blob/master/lists/lists-cs.pdf\">Tah&#xE1;k na seznamy</a>,\nkter&#xFD; si doporu&#x10D;uji vytisknout.</p>\n<p>Ka&#x17E;d&#xFD; p&#x159;&#xED;klad v tomto textu si vyzkou&#x161;ej;\nto, co Python vyp&#xED;&#x161;e, je d&#x16F;le&#x17E;it&#xE1; sou&#x10D;&#xE1;st lekce,\ni kdy&#x17E; v materi&#xE1;lech nen&#xED; p&#x159;&#xED;mo napsan&#xE1;.</p>\n<h1>Seznamy</h1>\n<p>Dnes si uk&#xE1;&#x17E;eme, jak pracovat se <em>seznamy</em> (angl. <em>lists</em>).\nDouf&#xE1;m, &#x17E;e v&#xED;&#x161;, kde m&#xE1;&#x161; na kl&#xE1;vesnici hranat&#xE9;\nz&#xE1;vorky, proto&#x17E;e pr&#xE1;v&#x11B; t&#x11B;mi se seznamy vytv&#xE1;&#x159;&#xED;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">cisla</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">13</span><span class=\"p\">]</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cisla</span><span class=\"p\">)</span>\n</pre></div><div class=\"admonition note\"><p>Nem&#x16F;&#x17E;e&#x161; naj&#xED;t hranat&#xE9; z&#xE1;vorky?\nNa &#x10D;esk&#xE9; kl&#xE1;vesnici zkus prav&#xFD; <kbd>Alt</kbd> + <kbd>F</kbd> a <kbd>G</kbd>.</p>\n</div><p>Seznam je hodnota, kter&#xE1; m&#x16F;&#x17E;e obsahovat spoustu dal&#x161;&#xED;ch hodnot.\nTak jako &#x159;et&#x11B;zec obsahuje sekvenci znak&#x16F;,\nseznam obsahuje sekvenci... &#x10D;ehokoliv. T&#x159;eba &#x10D;&#xED;sel.\nA tak jako m&#x16F;&#x17E;eme pomoc&#xED; cyklu <code>for</code>\nproch&#xE1;zet &#x159;et&#x11B;zec po znac&#xED;ch,\nseznam m&#x16F;&#x17E;eme proch&#xE1;zet po jednotliv&#xFD;ch prvc&#xED;ch:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">for</span> <span class=\"n\">cislo</span> <span class=\"ow\">in</span> <span class=\"n\">cisla</span><span class=\"p\">:</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cislo</span><span class=\"p\">)</span>\n</pre></div><p>Seznamy se v programech vyskytuj&#xED; velice &#x10D;asto:\nsoubor se d&#xE1; na&#x10D;&#xED;st jako seznam &#x159;et&#x11B;zc&#x16F;\ns jednotliv&#xFD;mi &#x159;&#xE1;dky,\nseznam &#x159;et&#x11B;zc&#x16F; jako <code>&apos;7&#x2665;&apos;</code>\na <code>&apos;K&#x2663;&apos;</code> m&#x16F;&#x17E;e poslou&#x17E;it jako bal&#xED;&#x10D;ek karet,\nmatematika je pln&#xE1; &#x10D;&#xED;seln&#xFD;ch &#x159;ad,\nka&#x17E;d&#xE1; online slu&#x17E;ba m&#xE1; seznam u&#x17E;ivatel&#x16F;.</p>\n<p>Hodnoty v seznamu m&#x16F;&#x17E;ou b&#xFD;t jak&#xE9;hokoli typu,\ndokonce m&#x16F;&#x17E;eme r&#x16F;zn&#xE9; typy m&#xED;chat v jednom seznamu\n(i kdy&#x17E; s takov&#xFD;mi namixovan&#xFD;mi seznamy se\np&#x159;&#xED;li&#x161; &#x10D;asto nesetk&#xE1;me &#x2013; v&#xED;ce se pou&#x17E;&#xED;vaj&#xED; v\n<var>n</var>-tic&#xED;ch, o kter&#xFD;ch si pov&#xED;me pozd&#x11B;ji):</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">seznam</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"s1\">&apos;abc&apos;</span><span class=\"p\">,</span> <span class=\"bp\">True</span><span class=\"p\">,</span> <span class=\"bp\">None</span><span class=\"p\">,</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">),</span> <span class=\"nb\">len</span><span class=\"p\">]</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">seznam</span><span class=\"p\">)</span>\n</pre></div><h2>Vyb&#xED;r&#xE1;n&#xED; ze seznam&#x16F;</h2>\n<p>Nejz&#xE1;kladn&#x11B;j&#x161;&#xED; operaci se seznamy,\ncyklus <code>for</code>, u&#x17E; jsme si uk&#xE1;zaly.\nDruh&#xE1; nejd&#x16F;le&#x17E;it&#x11B;j&#x161;&#xED; operace je vyb&#xED;r&#xE1;n&#xED;\njednotliv&#xFD;ch prvk&#x16F;.\nTo funguje jako u &#x159;et&#x11B;zc&#x16F;: do hranat&#xFD;ch z&#xE1;vorek\nse d&#xE1; &#x10D;&#xED;slo prvku. &#x10C;&#xED;sluje se, jako u &#x159;et&#x11B;zc&#x16F;,\nod nuly; z&#xE1;porn&#xE1; &#x10D;&#xED;sla ozna&#x10D;uj&#xED; prvky od konce.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cisla</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">])</span>\n</pre></div><p>Hranat&#xFD;mi z&#xE1;vorkami m&#x16F;&#x17E;eme z&#xED;sk&#xE1;vat podseznamy.\n<a href=\"/2018/czechitas-ostrava-jaro/beginners/str/#slicing-diagram\">Diagram z materi&#xE1;l&#x16F; k &#x159;et&#x11B;zc&#x16F;m</a>\nukazuje, jak u takov&#xE9;ho &#x201E;sek&#xE1;n&#xED;&#x201D; &#x10D;&#xED;slovat:\nfunguje to stejn&#x11B;, jen m&#xED;sto men&#x161;&#xED;ho &#x159;et&#x11B;zce\ndostaneme men&#x161;&#xED; seznam.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cisla</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">3</span><span class=\"p\">])</span>\n</pre></div><h2>M&#x11B;n&#x11B;n&#xED; seznam&#x16F;</h2>\n<p>D&#x16F;le&#x17E;it&#xE1; vlastnost seznam&#x16F;, kterou nemaj&#xED; ani &#x10D;&#xED;sla, ani &#x159;et&#x11B;zce\n(a <code>True</code>/<code>False</code>/<code>None</code> u&#x17E; v&#x16F;bec ne), je,\n&#x17E;e seznamy se daj&#xED; m&#x11B;nit.</p>\n<p>&#x10C;&#xED;sla m&#x11B;nit nejdou &#x2013; m&#xE1;&#x161;-li <code>a = 3</code> a\nnap&#xED;&#x161;e&#x161; <code>a = a + 1</code>, &#x10D;&#xED;slo <code>3</code> se nezm&#x11B;n&#xED;.\nVypo&#x10D;&#xED;t&#xE1; se nov&#xE9; &#x10D;&#xED;slo <code>4</code> a prom&#x11B;nn&#xE1; <code>a</code>\nse nastav&#xED; na toto nov&#xE9; &#x10D;&#xED;slo.</p>\n<p>Oproti tomu seznamy se daj&#xED; m&#x11B;nit bez nastavov&#xE1;n&#xED; prom&#x11B;nn&#xE9;.\nZ&#xE1;kladn&#xED; zp&#x16F;sob, jak zm&#x11B;nit seznam, je p&#x159;id&#xE1;n&#xED;\nprvku na konec pomoc&#xED; metody <code>append</code>.\nTa <em>nic nevrac&#xED;</em> (resp. vrac&#xED; <code>None</code>),\nale &#x201E;na m&#xED;st&#x11B;&#x201D; (angl. <em>in place</em>) zm&#x11B;n&#xED;\nseznam, na kter&#xE9;m pracuje. Vyzkou&#x161;ej si to:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">prvocisla</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">,</span> <span class=\"mi\">13</span><span class=\"p\">,</span> <span class=\"mi\">17</span><span class=\"p\">]</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">prvocisla</span><span class=\"p\">)</span>\n<span class=\"n\">prvocisla</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"mi\">19</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">prvocisla</span><span class=\"p\">)</span>\n</pre></div><p>Takov&#xE9; m&#x11B;n&#x11B;n&#xED; hodnoty m&#x16F;&#x17E;e b&#xFD;t ob&#x10D;as p&#x159;ekvapuj&#xED;c&#xED;,\nproto&#x17E;e stejnou hodnotu m&#x16F;&#x17E;e m&#xED;t v&#xED;ce prom&#x11B;nn&#xFD;ch.\nProto&#x17E;e se m&#x11B;n&#xED; hodnota samotn&#xE1;, m&#x16F;&#x17E;e to vypadat,\n&#x17E;e se prom&#x11B;nn&#xE1; &#x201E;m&#x11B;n&#xED; ani&#x17E; na ni s&#xE1;hneme&#x201D;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">]</span>   <span class=\"c1\"># vytvo&#x159;en&#xED; seznamu</span>\n<span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"n\">a</span>           <span class=\"c1\"># tady se nov&#xFD; seznam nevytv&#xE1;&#x159;&#xED;</span>\n\n<span class=\"c1\"># seznam vytvo&#x159;en&#xFD; v prvn&#xED;m &#x159;&#xE1;dku m&#xE1; te&#x10F; dv&#x11B; jm&#xE9;na: &quot;a&quot; a &quot;b&quot;,</span>\n<span class=\"c1\"># ale st&#xE1;le pracujeme jenom s jedn&#xED;m seznamem</span>\n\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"p\">)</span>\n</pre></div><h2>Dal&#x161;&#xED; zp&#x16F;soby, jak m&#x11B;nit seznamy</h2>\n<p>Krom&#x11B; metody <code>append</code>, kter&#xE1; p&#x159;id&#xE1;v&#xE1;\njedin&#xFD; prvek, existuje metoda <code>extend</code>,\nkter&#xE1; um&#xED; p&#x159;id&#xE1;vat prvk&#x16F; v&#xED;c.\nPrvky k p&#x159;id&#xE1;n&#xED; j&#xED; p&#x159;ed&#xE1;me ve form&#x11B; seznamu:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">dalsi_prvocisla</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">23</span><span class=\"p\">,</span> <span class=\"mi\">29</span><span class=\"p\">,</span> <span class=\"mi\">31</span><span class=\"p\">]</span>\n<span class=\"n\">prvocisla</span><span class=\"o\">.</span><span class=\"n\">extend</span><span class=\"p\">(</span><span class=\"n\">dalsi_prvocisla</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">prvocisla</span><span class=\"p\">)</span>\n</pre></div><p>Metoda <code>extend</code> um&#xED; pracovat i s jin&#xFD;mi\ntypy ne&#x17E; se seznamy &#x2013; r&#xE1;da zpracuje cokoli, p&#x159;es\nco um&#xED; cyklit <code>for</code>: nap&#x159;.\njednotliv&#xE9; znaky &#x159;et&#x11B;zc&#x16F;, &#x159;&#xE1;dky soubor&#x16F;, nebo &#x10D;&#xED;sla z&#xA0;<code>range()</code>.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">seznam</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n<span class=\"n\">seznam</span><span class=\"o\">.</span><span class=\"n\">extend</span><span class=\"p\">(</span><span class=\"s1\">&apos;abcdef&apos;</span><span class=\"p\">)</span>\n<span class=\"n\">seznam</span><span class=\"o\">.</span><span class=\"n\">extend</span><span class=\"p\">(</span><span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">))</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">seznam</span><span class=\"p\">)</span>\n</pre></div><h2>M&#x11B;n&#x11B;n&#xED; prvk&#x16F;</h2>\n<p>Ale dost p&#x159;id&#xE1;v&#xE1;n&#xED;.\nSeznam&#x16F;m se daj&#xED; i m&#x11B;nit jednotliv&#xE9; prvky\na to jednodu&#x161;e tak, &#x17E;e do prvku p&#x159;i&#x159;ad&#xED;me,\njako by to byla prom&#x11B;nn&#xE1;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">cisla</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">]</span>\n<span class=\"n\">cisla</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"mi\">2</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cisla</span><span class=\"p\">)</span>\n</pre></div><p>P&#x159;i&#x159;azovat se d&#xE1; i do podseznamu &#x2013; v tomto p&#x159;&#xED;pad&#x11B;\nse podseznam nahrad&#xED; jednotliv&#xFD;mi prvky z toho,\nco p&#x159;i&#x159;azujeme.\nJako u <code>extend</code> m&#x16F;&#x17E;e&#x161; do podseznamu op&#x11B;t p&#x159;i&#x159;adit cokoli, co um&#xED;\nzpracovat <code>for</code> &#x2013; seznam, &#x159;et&#x11B;zec, <code>range()</code> apod.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">cisla</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">]</span>\n<span class=\"n\">cisla</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">]</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cisla</span><span class=\"p\">)</span>\n</pre></div><h2>Maz&#xE1;n&#xED; prvk&#x16F;</h2>\n<p>P&#x159;i&#x159;azen&#xED;m do podseznamu se d&#xE1; i zm&#x11B;nit d&#xE9;lka\nseznamu, nebo n&#x11B;kter&#xE9; prvky &#xFA;pln&#x11B; odstranit:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">cisla</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">]</span>\n<span class=\"n\">cisla</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">,</span> <span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cisla</span><span class=\"p\">)</span>\n<span class=\"n\">cisla</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">:</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cisla</span><span class=\"p\">)</span>\n</pre></div><p>Tenhle z&#xE1;pis pro maz&#xE1;n&#xED; prvk&#x16F; je ale docela\nnep&#x159;ehledn&#xFD;, a proto na to m&#xE1;me zvl&#xE1;&#x161;tn&#xED; p&#x159;&#xED;kaz\njm&#xE9;nem <code>del</code>.\nJak u&#x17E; jeho n&#xE1;zev (z&#xA0;angl. <em>delete</em>, smazat)\nnapov&#xED;d&#xE1;, sma&#x17E;e, co mu p&#x159;ijde pod ruku &#x2013; jednotliv&#xE9;\nprvky seznam&#x16F;, podseznamy, &#x2026; a dokonce i prom&#x11B;nn&#xE9;!</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">cisla</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">]</span>\n<span class=\"k\">del</span> <span class=\"n\">cisla</span><span class=\"p\">[</span><span class=\"o\">-</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cisla</span><span class=\"p\">)</span>\n<span class=\"k\">del</span> <span class=\"n\">cisla</span><span class=\"p\">[</span><span class=\"mi\">3</span><span class=\"p\">:</span><span class=\"mi\">5</span><span class=\"p\">]</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cisla</span><span class=\"p\">)</span>\n<span class=\"k\">del</span> <span class=\"n\">cisla</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cisla</span><span class=\"p\">)</span>\n</pre></div><p>Dal&#x161;&#xED; mazac&#xED; metody jsou:</p>\n<ul>\n<li><code>pop</code>, kter&#xE1; odstran&#xED; <em>a vr&#xE1;t&#xED;</em> posledn&#xED; prvek v seznamu &#x2013; nap&#x159;&#xED;klad pokud\nm&#xE1;m seznam karet v bal&#xED;&#x10D;ku, jde takhle jednodu&#x161;e &#x201E;l&#xED;znout&#x201D; kartu,</li>\n<li><code>remove</code>, kter&#xE1; najde v seznamu dan&#xFD; prvek a odstran&#xED; ho,</li>\n<li><code>clear</code>, kter&#xE1; vypr&#xE1;zdn&#xED; cel&#xFD; seznam.</li>\n</ul>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">cisla</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"s1\">&apos;abc&apos;</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">,</span> <span class=\"mi\">12</span><span class=\"p\">]</span>\n<span class=\"n\">posledni</span> <span class=\"o\">=</span> <span class=\"n\">cisla</span><span class=\"o\">.</span><span class=\"n\">pop</span><span class=\"p\">()</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">posledni</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cisla</span><span class=\"p\">)</span>\n\n<span class=\"n\">cisla</span><span class=\"o\">.</span><span class=\"n\">remove</span><span class=\"p\">(</span><span class=\"s1\">&apos;abc&apos;</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cisla</span><span class=\"p\">)</span>\n\n<span class=\"n\">cisla</span><span class=\"o\">.</span><span class=\"n\">clear</span><span class=\"p\">()</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cisla</span><span class=\"p\">)</span>\n</pre></div><h2>&#x158;azen&#xED;</h2>\n<p>A taky tu m&#xE1;me metodu <code>sort</code>, kter&#xE1; prvky seznamu se&#x159;ad&#xED;.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">seznam</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">]</span>\n<span class=\"n\">seznam</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">()</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">seznam</span><span class=\"p\">)</span>\n</pre></div><p>Aby se daly se&#x159;adit, mus&#xED; b&#xFD;t prvky seznamu vz&#xE1;jemn&#x11B;\n<em>porovnateln&#xE9;</em> &#x2013; konktr&#xE9;tn&#x11B; na n&#x11B; mus&#xED; fungovat\noper&#xE1;tor <code>&lt;</code>.\nSeznam s mixem &#x10D;&#xED;sel a &#x159;et&#x11B;zc&#x16F; tedy se&#x159;adit nep&#x16F;jde.\nOper&#xE1;tor <code>&lt;</code> definuje i\njak p&#x159;esn&#x11B; se &#x159;ad&#xED; (nap&#x159;. &#x10D;&#xED;sla podle velikosti;\n&#x159;et&#x11B;zce podle speci&#xE1;ln&#xED; &#x201E;abecedy&#x201D; kter&#xE1; &#x159;ad&#xED;\nvelk&#xE1; p&#xED;smena za mal&#xE1;, &#x10D;esk&#xE1; a&#x17E; za anglick&#xE1;, atd.).</p>\n<p>Metoda <code>sort</code> zn&#xE1; pojmenovan&#xFD; argument\n<code>reverse</code>. Pokud ho nastav&#xED;&#x161; na <em>True</em>, &#x159;ad&#xED; se &#x201E;naopak&#x201D;.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">seznam</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">]</span>\n<span class=\"n\">seznam</span><span class=\"o\">.</span><span class=\"n\">sort</span><span class=\"p\">(</span><span class=\"n\">reverse</span><span class=\"o\">=</span><span class=\"bp\">True</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">seznam</span><span class=\"p\">)</span>\n</pre></div><h2>Zn&#xE1;m&#xE9; operace se seznamy</h2>\n<p>Spousta toho, co m&#x16F;&#x17E;eme d&#x11B;lat s &#x159;et&#x11B;zci, m&#xE1; stejn&#xFD;\n&#xFA;&#x10D;inek i u seznam&#x16F;.\nT&#x159;eba se&#x10D;&#xED;t&#xE1;n&#xED; a n&#xE1;soben&#xED; &#x10D;&#xED;slem:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">melodie</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&apos;C&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;E&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;G&apos;</span><span class=\"p\">]</span> <span class=\"o\">*</span> <span class=\"mi\">2</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"s1\">&apos;E&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;E&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;D&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;E&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;F&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;D&apos;</span><span class=\"p\">]</span> <span class=\"o\">*</span> <span class=\"mi\">2</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"s1\">&apos;E&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;D&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;C&apos;</span><span class=\"p\">]</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">melodie</span><span class=\"p\">)</span>\n</pre></div><p>Stejn&#x11B; jako u &#x159;et&#x11B;zc&#x16F;, se&#x10D;&#xED;tat jde jen seznam\nse seznamem &#x2013; ne t&#x159;eba seznam s &#x159;et&#x11B;zcem.</p>\n<p>Dal&#x161;&#xED; sta&#x159;&#xED; zn&#xE1;m&#xED; jsou funkce <code>len</code>,\nmetody <code>count</code> a <code>index</code>, a oper&#xE1;tor <code>in</code>.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"nb\">len</span><span class=\"p\">(</span><span class=\"n\">melodie</span><span class=\"p\">))</span>         <span class=\"c1\"># D&#xE9;lka seznamu</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">melodie</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">(</span><span class=\"s1\">&apos;D&apos;</span><span class=\"p\">))</span>   <span class=\"c1\"># Po&#x10D;et &apos;D&apos; v seznamu</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">melodie</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"s1\">&apos;D&apos;</span><span class=\"p\">))</span>   <span class=\"c1\"># &#x10C;&#xED;slo prvn&#xED;ho &apos;D&apos;</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;D&apos;</span> <span class=\"ow\">in</span> <span class=\"n\">melodie</span><span class=\"p\">)</span>       <span class=\"c1\"># Je &apos;D&apos; v seznamu?</span>\n</pre></div><p>Posledn&#xED; t&#x159;i se ale p&#x159;ece jen chovaj&#xED; kapku jinak:\nu &#x159;et&#x11B;zc&#x16F; pracuj&#xED; s&#xA0;<em>pod&#x159;et&#x11B;zci</em>,\nu seznam&#x16F; jen s&#xA0;<em>jednotliv&#xFD;mi</em> prvky.\nTak&#x17E;e a&#x10D;koliv na&#x161;e melodie obsahuje prvky\n<code>&apos;D&apos;</code> a <code>&apos;E&apos;</code> vedle sebe, <code>&apos;DE&apos;</code> v seznamu nen&#xED;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;DE&apos;</span> <span class=\"ow\">in</span> <span class=\"n\">melodie</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">melodie</span><span class=\"o\">.</span><span class=\"n\">count</span><span class=\"p\">(</span><span class=\"s1\">&apos;DE&apos;</span><span class=\"p\">))</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">melodie</span><span class=\"o\">.</span><span class=\"n\">index</span><span class=\"p\">(</span><span class=\"s1\">&apos;DE&apos;</span><span class=\"p\">))</span>\n</pre></div><h2>Seznam jako podm&#xED;nka</h2>\n<p>Seznam se d&#xE1; pou&#x17E;&#xED;t v p&#x159;&#xED;kazu <code>if</code> (nebo <code>while</code>) jako podm&#xED;nka,\nkter&#xE1; plat&#xED;, kdy&#x17E; v tom seznamu n&#x11B;co je.\nJin&#xFD;mi slovy, <code>seznam</code> je tu &#x201E;zkratka&#x201C; pro <code>len(seznam)&#xA0;&gt;&#xA0;0</code>.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">if</span> <span class=\"n\">seznam</span><span class=\"p\">:</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;V seznamu n&#x11B;co je!&apos;</span><span class=\"p\">)</span>\n<span class=\"k\">else</span><span class=\"p\">:</span>\n    <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"s1\">&apos;Seznam je pr&#xE1;zdn&#xFD;!&apos;</span><span class=\"p\">)</span>\n</pre></div><p>Podobn&#x11B; se daj&#xED; v podm&#xED;nce pou&#x17E;&#xED;t i &#x159;et&#x11B;zce.\nA dokonce i &#x10D;&#xED;sla &#x2013; ta jako podm&#xED;nka plat&#xED;, pokud jsou nenulov&#xE1;.</p>\n<h2>Tvo&#x159;en&#xED; seznam&#x16F;</h2>\n<p>Tak jako funkce <code>int</code> p&#x159;ev&#xE1;d&#xED; na\ncel&#xE1; &#x10D;&#xED;sla a <code>str</code> na &#x159;et&#x11B;zce,\nfunkce <code>list</code> (angl. <em>seznam</em>) p&#x159;ev&#xE1;d&#xED; na seznam.\nJako argument j&#xED; p&#x159;ed&#xE1;me jakoukoli hodnotu,\nkterou um&#xED; zpracovat p&#x159;&#xED;kaz <code>for</code>.\nZ&#xA0;&#x159;et&#x11B;zc&#x16F; ud&#x11B;l&#xE1; seznam znak&#x16F;, z&#xA0;otev&#x159;en&#xE9;ho souboru\nud&#x11B;l&#xE1; seznam &#x159;&#xE1;dk&#x16F;, z&#xA0;<code>range</code> ud&#x11B;l&#xE1;\nseznam &#x10D;&#xED;sel.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">abeceda</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"s1\">&apos;abcdefghijklmnopqrstuvwxyz&apos;</span><span class=\"p\">)</span>\n<span class=\"n\">cisla</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">100</span><span class=\"p\">))</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">abeceda</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cisla</span><span class=\"p\">)</span>\n</pre></div><p>I ze seznamu ud&#x11B;l&#xE1; funkce <code>list</code> seznam.\nTo m&#x16F;&#x17E;e zn&#xED;t zbyte&#x10D;n&#x11B;, ale nen&#xED; &#x2013; vytvo&#x159;&#xED; se\ntoti&#x17E; <em>nov&#xFD;</em> seznam.\nBude m&#xED;t sice stejn&#xE9; prvky ve stejn&#xE9;m po&#x159;ad&#xED;,\nale nebude to ten sam&#xFD; seznam:\nm&#x11B;nit se bude nez&#xE1;visle na tom star&#xE9;m.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">a</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">]</span>\n<span class=\"n\">b</span> <span class=\"o\">=</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"n\">a</span><span class=\"p\">)</span>\n\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"p\">)</span>\n<span class=\"n\">a</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"mi\">4</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">b</span><span class=\"p\">)</span>\n</pre></div><p>Dal&#x161;&#xED; zp&#x16F;sob, jak tvo&#x159;it seznamy\n(zvl&#xE1;&#x161;t&#x11B; slo&#x17E;it&#x11B;j&#x161;&#xED;), je nejd&#x159;&#xED;v ud&#x11B;lat pr&#xE1;zdn&#xFD;\nseznam a pak ho postupn&#x11B; naplnit pomoc&#xED; funkce <code>append</code>.\nT&#x159;eba pokud z n&#x11B;jak&#xE9;ho d&#x16F;vodu chce&#x161; seznam\nmocnin dvou, projdi &#x10D;&#xED;sla, kter&#xFD;mi chceme mocnit,\ncyklem <code>for</code> a pro ka&#x17E;d&#xE9; z nich\ndo seznamu p&#x159;idej p&#x159;&#xED;slu&#x161;nou mocninu:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">mocniny_dvou</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n<span class=\"k\">for</span> <span class=\"n\">cislo</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">10</span><span class=\"p\">):</span>\n    <span class=\"n\">mocniny_dvou</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"mi\">2</span> <span class=\"o\">**</span> <span class=\"n\">cislo</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">mocniny_dvou</span><span class=\"p\">)</span>\n</pre></div><p>Chce&#x161;-li seznam, kter&#xFD; reprezentuje bal&#xED;&#x10D;ek karet,\nzavolej <code>append</code> pro v&#x161;echny kombinace barev a hodnot.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">balicek</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n<span class=\"k\">for</span> <span class=\"n\">barva</span> <span class=\"ow\">in</span> <span class=\"s1\">&apos;&#x2660;&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;&#x2665;&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;&#x2666;&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;&#x2663;&apos;</span><span class=\"p\">:</span>  <span class=\"c1\"># (Na Windows pou&#x17E;ij textov&#xE1; jm&#xE9;na)</span>\n    <span class=\"k\">for</span> <span class=\"n\">hodnota</span> <span class=\"ow\">in</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">))</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"s1\">&apos;J&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;Q&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;K&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;A&apos;</span><span class=\"p\">]:</span>\n        <span class=\"n\">balicek</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">hodnota</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"n\">barva</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">balicek</span><span class=\"p\">)</span>\n</pre></div><h2>Seznamy a &#x159;et&#x11B;zce</h2>\n<p>Seznamy a &#x159;et&#x11B;zce jsou druhy &#x201E;sekvenc&#xED;&#x201D;,\ntak&#x17E;e snad nep&#x159;ekvap&#xED;, &#x17E;e se d&#xE1; r&#x16F;zn&#x11B; p&#x159;ev&#xE1;d&#x11B;t\nz jednoho typu na druh&#xFD;.\nFunkce <code>list</code> vytvo&#x159;&#xED; z &#x159;et&#x11B;zce\nseznam znak&#x16F;.\nKdy&#x17E; chceme dostat seznam slov, pou&#x17E;ijeme\nna &#x159;et&#x11B;zci metodu <code>split</code> (angl. <em>rozd&#x11B;lit</em>):</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">slova</span> <span class=\"o\">=</span> <span class=\"s1\">&apos;Tato v&#x11B;ta je slo&#x17E;it&#xE1;, rozd&#x11B;lme ji na slova!&apos;</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">()</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">slova</span><span class=\"p\">)</span>\n</pre></div><p>Metoda <code>split</code> um&#xED; br&#xE1;t i argument.\nPokud ho p&#x159;ed&#xE1;me, m&#xED;sto mezer (a nov&#xFD;ch &#x159;&#xE1;dk&#x16F;)\nse &#x159;et&#x11B;zec &#x201E;rozsek&#xE1;&#x201D; dan&#xFD;m odd&#x11B;lova&#x10D;em.\nTak&#x17E;e kdy&#x17E; m&#xE1;me n&#x11B;jak&#xE1; data odd&#x11B;len&#xE1; &#x10D;&#xE1;rkami,\nnen&#xED; nic jednodu&#x161;&#x161;&#xED;ho ne&#x17E; pou&#x17E;&#xED;t <code>split</code> s&#xA0;&#x10D;&#xE1;rkou:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">zaznamy</span> <span class=\"o\">=</span> <span class=\"s1\">&apos;3A,8B,2E,9D&apos;</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&apos;,&apos;</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">zaznamy</span><span class=\"p\">)</span>\n</pre></div><p>Chceme-li spojit seznam &#x159;et&#x11B;zc&#x16F; zase dohromady\ndo jedin&#xE9;ho &#x159;et&#x11B;zce, pou&#x17E;ijeme metodu\n<code>join</code> (angl. <em>spojit</em>).\nPozor, tahle metoda se vol&#xE1; na <em>odd&#x11B;lova&#x10D;i</em>,\ntedy &#x159;et&#x11B;zci, kter&#xFD;m se jednotliv&#xE9; kousky &#x201E;slep&#xED;&#x201D;\ndohromady; a jako argument bere seznam jednotliv&#xFD;ch\n&#x159;et&#x11B;zc&#x16F;.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">veta</span> <span class=\"o\">=</span> <span class=\"s1\">&apos; &apos;</span><span class=\"o\">.</span><span class=\"n\">join</span><span class=\"p\">(</span><span class=\"n\">slova</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">veta</span><span class=\"p\">)</span>\n</pre></div><h2>&#xDA;kol</h2>\n<p>P&#x159;edstav si, &#x17E;e ti u&#x17E;ivatel&#xE9; zad&#xE1;vaj&#xED; jm&#xE9;na a p&#x159;&#xED;jmen&#xED; a ty si je ukl&#xE1;d&#xE1;&#x161; do\nseznamu pro dal&#x161;&#xED; pou&#x17E;it&#xED; nap&#x159;. v evidenci student&#x16F;. Ne v&#x161;ichni jsou ale po&#x159;&#xE1;dn&#xED;,\na tak se v seznamu sem tam objev&#xED; i jm&#xE9;no s nespr&#xE1;vn&#x11B; zadan&#xFD;mi velk&#xFD;mi p&#xED;smeny.\nNap&#x159;&#xED;klad:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">zaznamy</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&apos;pepa nov&#xE1;k&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;Ji&#x159;&#xED; Sl&#xE1;dek&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;Ivo navr&#xE1;til&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;jan Poledn&#xED;k&apos;</span><span class=\"p\">]</span>\n</pre></div><p>&#xDA;kolem je:</p>\n<ul>\n<li>Napsat funkci, kter&#xE1; vybere jen ty spr&#xE1;vn&#x11B; zadan&#xE9; z&#xE1;znamy, kter&#xE9; maj&#xED; spr&#xE1;vn&#x11B;\njm&#xE9;no i p&#x159;&#xED;jmen&#xED; s velk&#xFD;m po&#x10D;&#xE1;te&#x10D;n&#xED;m p&#xED;smenem.</li>\n<li>Napsat funkci, kter&#xE1; vybere naopak jen ty nespr&#xE1;vn&#x11B; zadan&#xE9; z&#xE1;znamy.</li>\n<li><em>(Nepovinn&#xFD;)</em> &#x2013; Napsat funkci, kter&#xE1; vr&#xE1;t&#xED; seznam s opraven&#xFD;mi z&#xE1;znamy.</li>\n</ul>\n<p>V&#xFD;sledn&#xE9; funkce by m&#x11B;ly fungovat takto:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">zaznamy</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&apos;pepa nov&#xE1;k&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;Ji&#x159;&#xED; Sl&#xE1;dek&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;Ivo navr&#xE1;til&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;jan Poledn&#xED;k&apos;</span><span class=\"p\">]</span>\n\n<span class=\"n\">chybne_zaznamy</span> <span class=\"o\">=</span> <span class=\"n\">vyber_chybne</span><span class=\"p\">(</span><span class=\"n\">zaznamy</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">chybne_zaznamy</span><span class=\"p\">)</span> <span class=\"c1\"># &#x2192; [&apos;pepa nov&#xE1;k&apos;, &apos;Ivo navr&#xE1;til&apos;, &apos;jan Poledn&#xED;k&apos;]</span>\n\n<span class=\"n\">spravne_zaznamy</span> <span class=\"o\">=</span> <span class=\"n\">vyber_spravne</span><span class=\"p\">(</span><span class=\"n\">zaznamy</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">spravne_zaznamy</span><span class=\"p\">)</span> <span class=\"c1\"># &#x2192; [&apos;Ji&#x159;&#xED; Sl&#xE1;dek&apos;]</span>\n\n<span class=\"n\">opravene_zaznamy</span> <span class=\"o\">=</span> <span class=\"n\">oprav_zaznamy</span><span class=\"p\">(</span><span class=\"n\">zaznamy</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">opravene_zaznamy</span><span class=\"p\">)</span> <span class=\"c1\"># &#x2192; [&apos;Pepa Nov&#xE1;k&apos;, &apos;Ji&#x159;&#xED; Sl&#xE1;dek&apos;, &apos;Ivo Navr&#xE1;til&apos;, &apos;Jan Poledn&#xED;k&apos;]</span>\n</pre></div><div class=\"admonition note\"><p>Snadn&#xFD; zp&#x16F;sob jak zjistit, zda je &#x159;et&#x11B;zec slo&#x17E;en jen z mal&#xFD;ch p&#xED;smen,\nje metoda <code>islower()</code>, kter&#xE1; vrac&#xED; True, pokud &#x159;et&#x11B;zec obsahuje jen mal&#xE1;\np&#xED;smena, jinak vrac&#xED; False. Nap&#x159;&#xED;klad <code>&apos;abc&apos;.islower() == True</code> ale\n<code>&apos;aBc&apos;.islower() == False</code>.</p>\n<p>Snadn&#xFD; zp&#x16F;sob jak p&#x159;ev&#xE9;st prvn&#xED; p&#xED;smenko na velk&#xE9; je metoda <code>capitalize()</code>:\nnap&#x159;. <code>&apos;abc&apos;.capitalize() == &apos;Abc&apos;</code></p>\n</div><div class=\"solution\" id=\"solution-0\">\n    <h3>&#x158;e&#x161;en&#xED;</h3>\n    <div class=\"solution-cover\">\n        <a href=\"/2018/czechitas-ostrava-jaro/beginners/list/index/solutions/0/\"><span class=\"link-text\">Uk&#xE1;zat &#x159;e&#x161;en&#xED;</span></a>\n    </div>\n    <div class=\"solution-body\" aria-hidden=\"true\">\n        <div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">vyber_chybne</span><span class=\"p\">(</span><span class=\"n\">seznam</span><span class=\"p\">):</span>\n    <span class=\"n\">vysledek</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">zaznam</span> <span class=\"ow\">in</span> <span class=\"n\">seznam</span><span class=\"p\">:</span>\n        <span class=\"n\">jmeno_a_prijmeni</span> <span class=\"o\">=</span> <span class=\"n\">zaznam</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&apos; &apos;</span><span class=\"p\">)</span>\n        <span class=\"n\">jmeno</span> <span class=\"o\">=</span> <span class=\"n\">jmeno_a_prijmeni</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"n\">prijmeni</span> <span class=\"o\">=</span> <span class=\"n\">jmeno_a_prijmeni</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"n\">jmeno</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">islower</span><span class=\"p\">()</span> <span class=\"ow\">or</span> <span class=\"n\">prijmeni</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">islower</span><span class=\"p\">():</span>\n            <span class=\"n\">vysledek</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">zaznam</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">vysledek</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">vyber_spravne</span><span class=\"p\">(</span><span class=\"n\">seznam</span><span class=\"p\">):</span>\n    <span class=\"n\">vysledek</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">zaznam</span> <span class=\"ow\">in</span> <span class=\"n\">seznam</span><span class=\"p\">:</span>\n        <span class=\"n\">jmeno_a_prijmeni</span> <span class=\"o\">=</span> <span class=\"n\">zaznam</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&apos; &apos;</span><span class=\"p\">)</span>\n        <span class=\"n\">jmeno</span> <span class=\"o\">=</span> <span class=\"n\">jmeno_a_prijmeni</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"n\">prijmeni</span> <span class=\"o\">=</span> <span class=\"n\">jmeno_a_prijmeni</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n        <span class=\"k\">if</span> <span class=\"ow\">not</span> <span class=\"n\">jmeno</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">islower</span><span class=\"p\">()</span> <span class=\"ow\">and</span> <span class=\"ow\">not</span> <span class=\"n\">prijmeni</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span><span class=\"o\">.</span><span class=\"n\">islower</span><span class=\"p\">():</span>\n            <span class=\"n\">vysledek</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">zaznam</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">vysledek</span>\n\n<span class=\"k\">def</span> <span class=\"nf\">oprav_zaznamy</span><span class=\"p\">(</span><span class=\"n\">seznam</span><span class=\"p\">):</span>\n    <span class=\"n\">vysledek</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">zaznam</span> <span class=\"ow\">in</span> <span class=\"n\">seznam</span><span class=\"p\">:</span>\n        <span class=\"n\">jmeno_a_prijmeni</span> <span class=\"o\">=</span> <span class=\"n\">zaznam</span><span class=\"o\">.</span><span class=\"n\">split</span><span class=\"p\">(</span><span class=\"s1\">&apos; &apos;</span><span class=\"p\">)</span>\n        <span class=\"n\">jmeno</span> <span class=\"o\">=</span> <span class=\"n\">jmeno_a_prijmeni</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n        <span class=\"n\">prijmeni</span> <span class=\"o\">=</span> <span class=\"n\">jmeno_a_prijmeni</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n        <span class=\"n\">vysledek</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">jmeno</span><span class=\"o\">.</span><span class=\"n\">capitalize</span><span class=\"p\">()</span> <span class=\"o\">+</span> <span class=\"s1\">&apos; &apos;</span> <span class=\"o\">+</span> <span class=\"n\">prijmeni</span><span class=\"o\">.</span><span class=\"n\">capitalize</span><span class=\"p\">())</span>\n    <span class=\"k\">return</span> <span class=\"n\">vysledek</span>\n</pre></div>\n    </div>\n</div><h2>Seznamy a n&#xE1;hoda</h2>\n<p>Modul <code>random</code> obsahuje dv&#x11B; funkce, kter&#xE9; se hod&#xED; k&#xA0;seznam&#x16F;m.\nJako <code>random.randrange</code>, ob&#x11B; maj&#xED; n&#x11B;co\nspole&#x10D;n&#xE9;ho s n&#xE1;hodou.</p>\n<p>Funkce <code>shuffle</code> seznam &#x201E;zam&#xED;ch&#xE1;&#x201D; &#x2013; v&#x161;echny prvky n&#xE1;hodn&#x11B; pop&#x159;eh&#xE1;z&#xED;.\nJako metoda <code>sort</code> i funkce <code>shuffle</code> nic nevrac&#xED;.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">random</span>\n\n<span class=\"n\">balicek</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n<span class=\"k\">for</span> <span class=\"n\">barva</span> <span class=\"ow\">in</span> <span class=\"s1\">&apos;&#x2660;&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;&#x2665;&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;&#x2666;&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;&#x2663;&apos;</span><span class=\"p\">:</span>\n    <span class=\"k\">for</span> <span class=\"n\">hodnota</span> <span class=\"ow\">in</span> <span class=\"nb\">list</span><span class=\"p\">(</span><span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">11</span><span class=\"p\">))</span> <span class=\"o\">+</span> <span class=\"p\">[</span><span class=\"s1\">&apos;J&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;Q&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;K&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;A&apos;</span><span class=\"p\">]:</span>\n        <span class=\"n\">balicek</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"nb\">str</span><span class=\"p\">(</span><span class=\"n\">hodnota</span><span class=\"p\">)</span> <span class=\"o\">+</span> <span class=\"n\">barva</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">balicek</span><span class=\"p\">)</span>\n\n<span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">shuffle</span><span class=\"p\">(</span><span class=\"n\">balicek</span><span class=\"p\">)</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">balicek</span><span class=\"p\">)</span>\n</pre></div><p>A funkce <code>choice</code> ze seznamu vybere jeden n&#xE1;hodn&#xFD; prvek.\nS pou&#x17E;it&#xED;m seznamu tak m&#x16F;&#x17E;eme v&#xFD;razn&#x11B; zjednodu&#x161;it\n&#xFA;vodn&#xED; &#x10D;&#xE1;st na&#x161;&#xED; star&#xE9; hry k&#xE1;men/n&#x16F;&#x17E;ky/pap&#xED;r:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"kn\">import</span> <span class=\"nn\">random</span>\n<span class=\"n\">mozne_tahy</span> <span class=\"o\">=</span> <span class=\"p\">[</span><span class=\"s1\">&apos;k&#xE1;men&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;n&#x16F;&#x17E;ky&apos;</span><span class=\"p\">,</span> <span class=\"s1\">&apos;pap&#xED;r&apos;</span><span class=\"p\">]</span>\n<span class=\"n\">tah_pocitace</span> <span class=\"o\">=</span> <span class=\"n\">random</span><span class=\"o\">.</span><span class=\"n\">choice</span><span class=\"p\">(</span><span class=\"n\">mozne_tahy</span><span class=\"p\">)</span>\n</pre></div><h2>Vno&#x159;en&#xE9; seznamy</h2>\n<p>A perli&#x10D;ka na konec!\nNa za&#x10D;&#xE1;tku tohoto textu je naps&#xE1;no, &#x17E;e seznam\nm&#x16F;&#x17E;e obsahovat jak&#xFD;koli typ hodnot.\nM&#x16F;&#x17E;e t&#x159;eba obsahovat i dal&#x161;&#xED; seznamy:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">seznam_seznamu</span> <span class=\"o\">=</span> <span class=\"p\">[[</span><span class=\"mi\">1</span><span class=\"p\">,</span> <span class=\"mi\">2</span><span class=\"p\">,</span> <span class=\"mi\">3</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">4</span><span class=\"p\">,</span> <span class=\"mi\">5</span><span class=\"p\">,</span> <span class=\"mi\">6</span><span class=\"p\">],</span> <span class=\"p\">[</span><span class=\"mi\">7</span><span class=\"p\">,</span> <span class=\"mi\">8</span><span class=\"p\">,</span> <span class=\"mi\">9</span><span class=\"p\">]]</span>\n</pre></div><p>Takov&#xFD; seznam se chov&#xE1; docela norm&#xE1;ln&#x11B; &#x2013; jdou\nz&#xA0;n&#x11B;j t&#x159;eba br&#xE1;t jednotliv&#xE9; prvky\n(kter&#xE9; jsou ov&#x161;em taky seznamy):</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">prvni_seznam</span> <span class=\"o\">=</span> <span class=\"n\">seznam_seznamu</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">prvni_seznam</span><span class=\"p\">)</span>\n</pre></div><p>A proto&#x17E;e jsou prvky samy seznamy,\nm&#x16F;&#x17E;eme mluvit o v&#x11B;cech jako &#x201E;prvn&#xED; prvek druh&#xE9;ho seznamu&#x201D;:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">druhy_seznam</span> <span class=\"o\">=</span> <span class=\"n\">seznam_seznamu</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">]</span>\n<span class=\"n\">prvni_prvek_druheho_seznamu</span> <span class=\"o\">=</span> <span class=\"n\">druhy_seznam</span><span class=\"p\">[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">prvni_prvek_druheho_seznamu</span><span class=\"p\">)</span>\n</pre></div><p>A proto&#x17E;e v&#xFD;raz <code>seznam_seznamu[1]</code>\nozna&#x10D;uje seznam, m&#x16F;&#x17E;eme br&#xE1;t prvky p&#x159;&#xED;mo z n&#x11B;j:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">prvni_prvek_druheho_seznamu</span> <span class=\"o\">=</span> <span class=\"p\">(</span><span class=\"n\">seznam_seznamu</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">])[</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n</pre></div><p>Neboli:</p>\n<div class=\"highlight\"><pre><span></span><span class=\"n\">prvni_prvek_druheho_seznamu</span> <span class=\"o\">=</span> <span class=\"n\">seznam_seznamu</span><span class=\"p\">[</span><span class=\"mi\">1</span><span class=\"p\">][</span><span class=\"mi\">0</span><span class=\"p\">]</span>\n</pre></div><p>A m&#xE1; tahle v&#x11B;c n&#x11B;jak&#xE9; pou&#x17E;it&#xED;, pt&#xE1;&#x161; se?\nStejn&#x11B; jako vno&#x159;en&#xE9; cykly <code>for</code>\nn&#xE1;m umo&#x17E;nily vypsat tabulku, vno&#x159;en&#xE9; seznamy\nn&#xE1;m umo&#x17E;n&#xED; si tabulku &#x201E;zapamatovat&#x201D;.</p>\n<div class=\"highlight\"><pre><span></span><span class=\"k\">def</span> <span class=\"nf\">vytvor_tabulku</span><span class=\"p\">(</span><span class=\"n\">velikost</span><span class=\"o\">=</span><span class=\"mi\">11</span><span class=\"p\">):</span>\n    <span class=\"n\">seznam_radku</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n    <span class=\"k\">for</span> <span class=\"n\">a</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">velikost</span><span class=\"p\">):</span>\n        <span class=\"n\">radek</span> <span class=\"o\">=</span> <span class=\"p\">[]</span>\n        <span class=\"k\">for</span> <span class=\"n\">b</span> <span class=\"ow\">in</span> <span class=\"nb\">range</span><span class=\"p\">(</span><span class=\"n\">velikost</span><span class=\"p\">):</span>\n            <span class=\"n\">radek</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">a</span> <span class=\"o\">*</span> <span class=\"n\">b</span><span class=\"p\">)</span>\n        <span class=\"n\">seznam_radku</span><span class=\"o\">.</span><span class=\"n\">append</span><span class=\"p\">(</span><span class=\"n\">radek</span><span class=\"p\">)</span>\n    <span class=\"k\">return</span> <span class=\"n\">seznam_radku</span>\n\n<span class=\"n\">nasobilka</span> <span class=\"o\">=</span> <span class=\"n\">vytvor_tabulku</span><span class=\"p\">()</span>\n\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">nasobilka</span><span class=\"p\">[</span><span class=\"mi\">2</span><span class=\"p\">][</span><span class=\"mi\">3</span><span class=\"p\">])</span>  <span class=\"c1\"># dva kr&#xE1;t t&#x159;i</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">nasobilka</span><span class=\"p\">[</span><span class=\"mi\">5</span><span class=\"p\">][</span><span class=\"mi\">2</span><span class=\"p\">])</span>  <span class=\"c1\"># p&#x11B;t kr&#xE1;t dva</span>\n<span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">nasobilka</span><span class=\"p\">[</span><span class=\"mi\">8</span><span class=\"p\">][</span><span class=\"mi\">7</span><span class=\"p\">])</span>  <span class=\"c1\"># osm kr&#xE1;t sedm</span>\n\n<span class=\"c1\"># Vyps&#xE1;n&#xED; cel&#xE9; tabulky</span>\n<span class=\"k\">for</span> <span class=\"n\">radek</span> <span class=\"ow\">in</span> <span class=\"n\">nasobilka</span><span class=\"p\">:</span>\n    <span class=\"k\">for</span> <span class=\"n\">cislo</span> <span class=\"ow\">in</span> <span class=\"n\">radek</span><span class=\"p\">:</span>\n        <span class=\"k\">print</span><span class=\"p\">(</span><span class=\"n\">cislo</span><span class=\"p\">,</span> <span class=\"n\">end</span><span class=\"o\">=</span><span class=\"s1\">&apos; &apos;</span><span class=\"p\">)</span>\n    <span class=\"k\">print</span><span class=\"p\">()</span>\n</pre></div><p>Co s takovou &#x201E;zapamatovanou&#x201D; tabulkou?\nM&#x16F;&#x17E;e&#x161; si do n&#xED; ulo&#x17E;it t&#x159;eba pozice\nfigurek na &#x161;achovnici nebo k&#x159;&#xED;&#x17E;k&#x16F; a kole&#x10D;ek\nve <em>2D</em> pi&#x161;kvork&#xE1;ch.</p>\n\n\n        "
    }
  }
}