5. diel - Zoznamy v Pythone, ich základné funkcie a metódy
V predchádzajúcom cvičení, Riešené úlohy k 4. lekcii Pythone, sme si precvičili získané skúsenosti z predchádzajúcich lekcií.
V minulej lekcii, Riešené úlohy k 4. lekcii Pythone , sme si ukázali, ako používať cykly v Pythone. V dnešnom tutoriálu sa pozrieme na zoznamy a tiež sa naučíme rôzne funkcie, ktoré možno aplikovať aj na iné kolekcie. O tých ale až neskôr.
Úvod do zoznamov
Predstavte si, že potrebujete uložiť nejaké hodnoty, napr. Zamestnanca nejakej firmy. A tých hodnôt je veľké množstvo (napr. 100 osôb). Vytvárať si na každú z nich premennou je hotové šialenstvo.
Zoznamy
Zoznam nám poskytuje spôsob, ako ukladať väčšie množstvo hodnôt prehľadne a na jedno miesto.
Vytváranie zoznamov
Zoznam sa vytvára za pomoci hranatých zátvoriek a jednotlivé prvky v ňom oddelíme čiarkou.
Príklad:
seznam_1 = [] seznam_2 = [1, 2, 3] seznam_3 = ["a", "b", "c"] seznam_4 = ["a", 1, "b", 2]
Zoznamy môžeme vytvárať aj za pomoci funkcií range()
a
list()
. Funkcia range()
vracia iterátor, ktorý je
prevedený na zoznam pomocou funkcie list. O iterátory ale až niekedy inokedy
Funkciu range()
sme už preberali. Pre zopakovanie syntaxe:
range(n)
- vráti čísla od nuly don-1
range(m, n)
- vráti čísla odm
don-1
range(m, n, i)
- vráti čísla odm
a každé ďalšie i-tej číslo don-1
Pár takto vytvorených zoznamov:
seznam_1 = list() #prázdny zoznam seznam_2 = list(range(3)) #[0, 1, 2] seznam_3 = list(range(3, 7)) #[3, 4, 5, 6] seznam_4 = list(range(1, 10, 2)) #[1, 3, 5, 7, 9]
Jednotlivé prvky
K jednotlivým prvkom zoznamu je možné pristupovať pomocou indexov.
Číslovanie začína od nuly. Každý ďalší prvok má číslo väčšie o
1
. To znamená, že prvý prvok má index 0
, ďalší
1
, ešte ďalšie má index 2
atď.
V Pythone môžeme pre prístup k prvkom použiť aj záporné indexy. Tie sa
číslujú odzadu. Teda posledný prvok má index -1
, predposledný
-2
atď. K prvkom sa pristupuje cez hranaté zátvorky.
{PYTHON}
seznam = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
print(seznam[0])
print(seznam[1])
print(seznam[5])
print(seznam[7])
print(seznam[-1])
print(seznam[-3])
{/PYTHON}
Konzolová aplikácia
>>> seznam = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]
>>> seznam[0]
2
>>> seznam[1]
3
>>> seznam[5]
13
>>> seznam[7]
19
>>> seznam[-1]
29
>>> seznam[-3]
19
>>>
Orezávanie
Zoznamy možno i orezávať. To znamená, že zo zoznamu získame jeho časť. Syntax je rovnaká, ako v predchádzajúcom prípade, až na to, že do hranaté zátvorky sa vloží aj koncový index, po prípadne i koľký prvok chceme.
Príklady:
{PYTHON}
seznam = list(range(10))
print(seznam)
print(seznam[0:5])
print(seznam[2:8])
print(seznam[1:7])
print(seznam[1:7:2])
print(seznam[2:9:2])
print(seznam[1:7:3])
{/PYTHON}
Konzolová aplikácia
>>> seznam = list(range(10))
>>> seznam
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> seznam[0:5]
[0, 1, 2, 3, 4]
>>> seznam[2:8]
[2, 3, 4, 5, 6, 7]
>>> seznam[1:7]
[1, 2, 3, 4, 5, 6]
>>> seznam[1:7:2]
[1, 3, 5]
>>> seznam[2:9:2]
[2, 4, 6, 8]
>>> seznam[1:7:3]
[1, 4]
>>>
Syntax:
název_seznamu [m]
- vyberie jediný prvoknázev_seznamu [m:n]
- vyberie prvky v rozsahum
ažn-1
název_seznamu [m:n:i]
- vyberiem
a každýi
-Ty prvok don-1
Jednotlivé argumenty určujúce čo chceme vybrať, možno aj vynechať.
Môžeme teda napísať [::2]
, čo vám vyberie každý druhý
prvok v zozname.
Pokiaľ nie je zadaný prvý prvok, berie sa od začiatku zoznamu
(0
). Ak nie je zadaný druhý prvok, berie sa koniec zoznamu. A ak
nie je zadané o koľko prvkov chceme postupovať, berie sa to ako
1
, teda sa vezme každý prvok v zadanom intervale.
Veľkosť zoznamu
Na zistenie veľkosti zoznamu (či iného iterovatelného objektu) máme k
dispozícii funkciu len()
. Tá vracia počet prvkov.
Príklad:
{PYTHON}
seznam = [1, 2, 3, "a", "b"]
print(len(seznam))
{/PYTHON}
Prechádzanie zoznamu
Na prechádzanie zoznamu existujú tri spôsoby:
1) for
.. in
Pomocou jednoduchého cyklu for..in
získame jednotlivé prvky.
Bohužiaľ je týmto spôsobom nemôžeme v prehliadaní zoznamu upravovať. Ale
môžeme ich napríklad vytlačiť.
Syntax:
{PYTHON}
seznam = [1, 2, 3]
for prvek in seznam:
print(prvek)
{/PYTHON}
Pri prechode cyklom sa prvok zo zoznamu uloží do premennej prvok a my s ním môžeme niečo urobiť (napr. Vytlačiť ako v ukážke). Potom sa tento prvok "zahodí" a vezme sa ďalší prvok zo zoznamu.
2) Pomocou funkcie range()
Použijeme funkciu range()
, len()
a cyklus
for..in
.
Syntax:
{PYTHON}
seznam = [1, 2, 3]
for index in range(len(seznam)):
seznam[index] = seznam[index] + 1
print(seznam)
{/PYTHON}
for index in range(len(seznam)): seznam[index] = seznam[index] + 1 # všetky čísla v zozname zväčšíme o 1
Pozor! Ak chceme robiť to isté čo v ukážke, musí byť zoznam iba z čísel!
Funkcia len()
nám vráti počet prvkov a tento počet si
prevedieme na iterátor, ktorý nám vracia indexy od prvého prvku
(0
) do posledného komponentu
(veľkosť zoznamu - 1
). Potom k prvkom pristupujeme cez
indexy.
3) Pomocou funkcie
enumerate()
Funkcia enumerate()
vracia index prvku aj jeho hodnotu. Za
for
nasleduje premenná i
, do ktorej sa ukladá index
prvku a ľubovoľná premenná, do ktorej sa ukladá hodnota prvku.
Syntax:
{PYTHON}
seznam = [1, 2, 3]
for i, prvek in enumerate(seznam):
print(i, prvek)
print(seznam)
{/PYTHON}
Týmto spôsobom získame ako prvok, tak i jeho index
Metódy
Metódy sa na rozdiel od funkcií
název_funkce ( názov_objektu)
Majú túto
syntax:
názov_objektu. název_metody ( parametre)
.
Sú to teda funkcie, ktoré patrí nejakému objektu.
V tejto lekcii sa naučíme dve metódy - append()
a
pop()
.
append()
Metóda append()
pripojí prvok na koniec
zoznamu.
Príklad:
{PYTHON}
seznam = [1, 2]
seznam.append(3)
print(seznam)
seznam.append(5)
print(seznam)
seznam.append(8)
print(seznam)
seznam.append(13)
print(seznam)
seznam.append(21)
print(seznam)
seznam.append(34)
print(seznam)
{/PYTHON}
Konzolová aplikácia
>>> seznam = [1, 2]
>>> seznam.appendlt;3>
>>> seznam
[1, 2, 3]
>>> seznam.appendlt;5>
>>> seznam
[1, 2, 3, 5]
>>> seznam.appendlt;8>
>>> seznam
[1, 2, 3, 5, 8]
>>> seznam.appendlt;13>
>>> seznam
[1, 2, 3, 5, 8, 13]
>>> seznam.appendlt;21>
>>> seznam
[1, 2, 3, 5, 8, 13, 21]
>>> seznam.appendlt;34>
>>> seznam
[1, 2, 3, 5, 8, 13, 21, 34]
>>>
pop()
Metóda pop()
vráti a odstráni posledný
prvok zo zoznamu.
Príklad:
{PYTHON}
seznam = [1, 2, 3, 5, 8, 13, 21, 34]
seznam.pop()
print(seznam)
seznam.pop()
print(seznam)
promenna = seznam.pop()
print(promenna)
print(seznam)
seznam.pop()
print(seznam)
{/PYTHON}
Konzolová aplikácia
>>> seznam = [1, 2, 3, 5, 8, 13, 21, 34]
>>> seznam.pop()
34
>>> seznam
[1, 2, 3, 5, 8, 13, 21]
>>> seznam.pop()
21
>>> seznam
[1, 2, 3, 5, 8, 13]
>>> promenna = seznam.pop()
>>> promenna
13
>>> seznam
[1, 2, 3, 5, 8]
>>> seznam.pop()
8
>>> seznam
[1, 2, 3, 5]
>>>
Funkcie
Všetky tieto funkcie sa dajú použiť aj na iné iterovatelné objekty, než je zoznam.
len()
Vráti počet prvkov iterovatelného objektu.
Príklad:
{PYTHON}
seznam = [1, 3, 2, 0, 5]
print(len(seznam))
{/PYTHON}
min()
Vráti z iterovatelného objektu prvok s najmenšou hodnotou.
{PYTHON}
seznam = [1, 3, 2, 0, 5]
print(min(seznam))
{/PYTHON}
max()
Vráti z iterovatelného objektu prvok s najväčšou hodnotou.
{PYTHON}
seznam = [1, 3, 2, 0, 5]
print(max(seznam))
{/PYTHON}
sum()
Vráti súčet prvkov v iterovatelném objektu.
{PYTHON}
seznam = [1, 3, 2, 0, 5]
print(sum(seznam))
{/PYTHON}
sorted()
Zoradia prvky v iterovatelném objektu.
{PYTHON}
seznam = [1, 3, 2, 0, 5]
print(sorted(seznam))
{/PYTHON}
Možno tiež použiť metódu zoznamu sort
(), ktorá zoznam
rovno zoradia, pretože funkcia sorted()
vracia iba jeho zoradenú
kópiu a zoznam zostáva nezmenený.
all()
Vráti boolean True
, ak sa všetky prvky v iterovatelném
objekte vyhodnotí na True
, inak vráti False
.
{PYTHON}
seznam_1 = [1, 3, 2, 0, 5]
seznam_2 = [6, 4, 5, 1, 2]
print(all(seznam_1))
print(all(seznam_2))
{/PYTHON}
any()
Vráti boolean True
, ak sa aspoň jeden prvok v iterovatelném
objekte vyhodnotí na True
, inak vráti False
.
{PYTHON}
seznam_1 = [1, 3, 2, 0, 5]
seznam_2 = [6, 4, 5, 1, 2]
seznam_3 = []
print(any(seznam_1))
print(any(seznam_2))
print(any(seznam_3))
{/PYTHON}
del()
Pomocou del()
možno jednotlivé prvky zo zoznamu mazať za
pomoci rezu. Príklad:
{PYTHON}
seznam = [1, 3, 2, 0, 5]
del(seznam[1])
print(seznam)
del(seznam[1:3])
print(seznam)
{/PYTHON}
A to je pre tento diel všetko
V budúcej lekcii, Riešené úlohy k 5. lekcii Pythone , nás čakajú reťazca v Pythone.
V nasledujúcom cvičení, Riešené úlohy k 5. lekcii Pythone, si precvičíme nadobudnuté skúsenosti z predchádzajúcich lekcií.