Zoznam (anglicky list, niekedy nazývaný aj pole) je ďalší základný dátový typ v Pythone – umožňuje uložiť viacero hodnôt (aj rôznych typov) pod jedno meno premennej. Zoznam sa zapisuje pomocou hranatých zátvoriek [ ], jednotlivé prvky sa oddeľujú čiarkou. Na rozdiel od reťazca je zoznam meniteľný (mutable). Nadviažeme na základy práce so zoznamami.
Pri definícii zoznamu použite správne zátvorky [ ]. S prvkami zoznamu vieme pracovať podobne ako so znakmi reťazca – cez index aj cez rezy (slicing).
Vyskúšajte v Shelli nasledujúce príkazy (analogické ako sme mali pri stringu):
Najprv odhadnite, čo bude výsledkom, a potom si to overte:
Z predchádzajúcej kapitoly vieme, že typ String je nemeniteľný (inmutable). Ako je to so zoznamom? Podarí sa vykonať zmenu, t.j. zmeniť napríklad prvý prvok daného zoznamu?
V reťazcoch sa priamo nedá zmeniť žiadny znak, naproti tomu sme tu zistili, že zoznam je typ meniteľný (tzv. mutable). Ešte otestujte, či v zoznamoch fungujú rezy, podobne ako to fungovalo u reťazcov:
Vyskúšajte si operácie so zoznamami:
nic = ['']*5.
Zoznamom, podobne ako reťazcom, vieme prechádzať cyklom for viacerými spôsobmi:
Vypíšte zo zoznamu nižšie iba kladné čísla – naprogramujte ;-)
if v cykle for.
Vyskúšajte si funkcie len(), max(), min(), sum() na prácu so zoznamom (parametrom funkcie je zoznam, preto do zátvorky treba uviesť s ktorým zoznamom sa má pracovať). Vždy najprv odhadnite, čo vráti daná funkcia, a potom si to v Shelli overte::
max() a min() vedia porovnávať aj reťazce – podľa abecedného (presnejšie ASCII/Unicode) poradia znakov. Funkcia sum() funguje iba pre zoznam čísel.
Nad premennou typu zoznam existuje aj niekoľko užitočných metód: .append(), .insert(), .pop(), .reverse(), .sort(). Vyskúšajte si ich na týchto zoznamoch priamo v Shelli:
Vytvorte program, ktorý od užívateľa načíta 10 krstných mien, uloží si ich do zoznamu, následne zoznam utriedi podľa abecedy a vypíše usporiadané mená pod seba.
Zoznamy sú v pamäti počítača uložené špeciálnym spôsobom (na rozdiel napr. od čísel) – odhalí vám to krokovanie programu. Vyskúšajte si priradenie zoznamu do inej premennej, najprv si to premyslite bez PC a potom overte. V premennej mesta budeme mať uložený zoznam slovenských miest, v premennej chcemVidiet budú mestá, ktoré by som chcel raz navštíviť.
Čo bude obsahovať premenná chcemVidiet po týchto príkazoch? Svoj odhad porovnajte so skutočnosťou cez print(chcemVidiet).
Čo bude obsahovať premenná mesta po týchto príkazoch? Svoj odhad porovnajte so skutočnosťou cez print(mesta).
Niekedy však potrebujeme mať pravú kópiu zoznamu (aby nedošlo k takýmto nechceným zmenám), vyskúšajte to preto takto cez rezy (porovnajte to aj vizualne na stránke pythontutor.com):
Ak chceme zistiť, či je nejaký prvok v zozname, môžeme použiť operátor in (prípadne not in). Vyskúšajte si to v Shelli:
Upravte program z úlohy MS03-A – dodefinujte tam funkciu (namiesto operátora in), ktorá prechádzaním prvkov zoznamu zistí, koľkokrát sa v zozname nachádza jedno konkrétne meno (určí ho užívateľ na vstupe).
1. Akými zátvorkami sa v Pythone definuje zoznam (list)?
a) okrúhlymi( )[ ]{ }' '
2. Zoznam ovocie má 6 prvkov (indexy 0 až 5). Čo spôsobí príkaz ovocie[6]?
None
3. Je typ zoznam (list) meniteľný (mutable)?
a) Áno, na rozdiel od reťazca môžeme jeho prvky meniť priamo, napr.zoznam[0]='niečo'list()
4. Čo vráti výraz velaovocia[::-1]?
5. Čo vypíše nasledujúci kód?a=[1,2,3]
print(3*a)
6. Po príkaze for i in range(len(zoznam)): print(i) sa vypíšu:
7. Ktorá metóda vloží nový prvok na koniec zoznamu?
a).insert().push().append().add()
8. Čo vráti metóda .pop() volaná bez parametra?
9. Máme kód:
zoznam = [1,2,3,4,5]
dni = zoznam
dni.append(6)
Čo bude po tomto obsahovať premenná zoznam?
10. Ako vytvoríme skutočnú (nezávislú) kópiu zoznamu, aby zmena kópie neovplyvnila pôvodný zoznam?
a)novy = povodnynovy = povodny[:]novy = povodny.append(povodny)novy = len(povodny)