Premenná uchováva jednu hodnotu. Čo ak potrebuješ uložiť zoznam 30 mien žiakov? Písať 30 premenných by bolo nešikovné. Na to slúžia zoznamy — štruktúry na uchovávanie viacerých hodnôt pod jedným názvom.
Vytvorenie zoznamu
ovocie = ["jablko", "banán", "čerešňa"]
cisla = [1, 2, 3, 4, 5]
mieszany = [42, "ahoj", True, 3.14] # zoznam môže mať rôzne typy
prazdny = [] # prázdny zoznam
Prístup k prvkom
Rovnako ako reťazce, zoznamy používajú indexovanie od 0:
ovocie = ["jablko", "banán", "čerešňa", "hrozno"]
print(ovocie[0]) # jablko
print(ovocie[2]) # čerešňa
print(ovocie[-1]) # hrozno (posledný)
print(len(ovocie)) # 4 (počet prvkov)
Zmena prvkov
Na rozdiel od reťazcov, zoznamy sú meniteľné — môžeš meniť prvky na mieste:
znamky = [1, 2, 3, 2, 1]
znamky[2] = 1 # zmení tretiu známku na 1
print(znamky) # [1, 2, 1, 2, 1]
Pridávanie a odstraňovanie prvkov
nakupny_zoznam = ["mlieko", "chlieb"]
nakupny_zoznam.append("maslo") # pridá na koniec
nakupny_zoznam.insert(1, "vajíčka") # vloží na pozíciu 1
print(nakupny_zoznam)
# ["mlieko", "vajíčka", "chlieb", "maslo"]
nakupny_zoznam.remove("chlieb") # odstráni prvý výskyt "chlieb"
posledny = nakupny_zoznam.pop() # odstráni a vráti posledný prvok
print(posledny) # maslo
append() je rýchla operácia — pridáva na koniec. insert() je pomalšia pri veľkých zoznamoch, pretože musí posunúť všetky nasledujúce prvky.
Prechádzanie zoznamu
mena = ["Anna", "Boris", "Cecília"]
# For loop — najčastejší spôsob
for meno in mena:
print(f"Ahoj, {meno}!")
# S indexom pomocou enumerate
for i, meno in enumerate(mena):
print(f"{i + 1}. {meno}")
Užitočné metódy zoznamu
cisla = [3, 1, 4, 1, 5, 9, 2, 6]
print(sorted(cisla)) # [1, 1, 2, 3, 4, 5, 6, 9] — nový zoradený zoznam
cisla.sort() # zoradi pôvodný zoznam
cisla.reverse() # otočí poradie
print(cisla.count(1)) # 2 — počet výskytov hodnoty 1
print(cisla.index(4)) # pozícia prvého výskytu 4
print(4 in cisla) # True — je 4 v zozname?
sorted(zoznam) vráti nový zoradený zoznam a originál nezmení. zoznam.sort() zoradí pôvodný zoznam na mieste a nič nevracia. Vyber podľa toho, čo potrebuješ.
Slicing zoznamu
Rovnako ako u reťazcov, môžeš vystrihávať časti zoznamu:
cisla = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(cisla[2:5]) # [2, 3, 4]
print(cisla[:4]) # [0, 1, 2, 3]
print(cisla[7:]) # [7, 8, 9]
print(cisla[::2]) # [0, 2, 4, 6, 8] — každý druhý
print(cisla[::-1]) # [9, 8, 7, ..., 0] — obrátený
Dvojrozmerné zoznamy
Zoznam zoznamov reprezentuje tabuľku alebo mriežku:
sach_tabl = [
["V", "J", "S", "D", "K", "S", "J", "V"],
["P", "P", "P", "P", "P", "P", "P", "P"],
# ...
]
print(sach_tabl[0][4]) # "K" — prvý riadok, piaty stĺpec (kráľ)
Keď kopíruješ zoznam pomocou b = a, oba názvy ukazujú na ten istý zoznam! Zmena cez b zmení aj a. Na vytvorenie skutočnej kópie použi b = a.copy() alebo b = a[:].
Cvičné príklady
Čo vypíše tento kód? zoznam = [10, 20, 30, 40, 50]; zoznam.append(60); print(zoznam[2]); print(len(zoznam))
Zobraziť odpoveď
Ako zistíš súčet všetkých čísel v zozname cisla = [5, 10, 15, 20] bez použitia vstavanej funkcie sum()?