Seznami
Avtor slike: Teja Rutar
Seznam je vrsta spremenljivke (podatkovna struktura), ki vsebuje več podatkov. Seznam definiramo z uporabo oglatih oklepajev []. Elemente seznama ločimo z vejico ,. Seznam lahko vsebuje različne podatkovne tipe, vendar je to slaba praksa.
seznam_nizov = ["Jabolko", "Hruška", "Mandarina"]
seznam_stevil = [-5, 0, 5, 10]
prazen_seznam = []
# ne delat tega
mesan_seznam = ["Jabolko", 5, 10.5, True]
Dostop do elementov
Elemente seznama lahko dostopamo preko indeksa. Indeks elementa je njegova številka v seznamu. Prvi element ima indeks 0, drugi 1, tretji 2, itd. Indeks elementa podamo v oglatih oklepajih [] za seznamom.
drzave = ["Slovenija", "Hrvaška", "Avstrija", "Italija"]
print(drzave[0]) # Slovenija
print(drzave[1]) # Hrvaška
print(drzave[2]) # Avstrija
print(drzave[3]) # Italija
Če poskušamo dostopati do elementa, ki ne obstaja, dobimo napako.
print(drzave[4]) # IndexError: list index out of range
V Pythonu je možna tudi uporaba negativnih indeksov. V tem primeru se šteje od konca seznama. Zadnji element ima indeks -1, predzadnji -2, itd.
print(drzave[-1]) # Italija
print(drzave[-4]) # Slovenija
Rezinjanje (slicing)
Včasih želimo dostopati do več elementov hkrati. To naredimo s rezinjanjem (ang. slicing). Rezinjanje omogoča, da iz seznama izberemo podseznam. Podseznam izberemo tako, da podamo začetni in končni indeks, ločena z dvopičjem :. Začetni indeks je vključen, končni pa izključen. Če izpustimo začetni indeks, se začne rezinjanje na začetku seznama. Če izpustimo končni indeks, se rezinjanje konča na koncu seznama.
print(drzave[0:2]) # ["Slovenija", "Hrvaška"]
print(drzave[1:4]) # ["Hrvaška", "Avstrija", "Italija"]
Dodamo pa lahko tudi tretji argument, ki določa korak. Če je korak pozitiven, se rezinjanje izvaja od začetnega do končnega indeksa. Če je korak negativen, se rezinjanje izvaja od končnega do začetnega indeksa.
print(drzave[0:4:2]) # ["Slovenija", "Avstrija"]
print(drzave[3:0:-1]) # ["Italija", "Avstrija", "Hrvaška"]
print(drzave[::-1]) # ["Italija", "Avstrija", "Hrvaška", "Slovenija"]
Spreminjanje elementov
Elemente seznama lahko spreminjamo. Z indeksom določimo element, ki ga želimo spremeniti, nato pa mu priredimo novo vrednost.
drzave[1] = "Francija"
drzave[-1] = "Nemčija"
print(drzave) # ["Slovenija", "Francija", "Avstrija", "Nemčija"]
Dodajanje elementov
Elemente seznama lahko dodajamo na konec seznama. To naredimo z metodo append.
stevilke = [1, 2, 3]
stevilke.append(4)
print(stevilke) # [1, 2, 3, 4]
Z uporabo metode insert lahko dodamo element na poljubno mesto v seznamu. Metoda insert sprejme dva argumenta: indeks, na katerega želimo dodati element, in element, ki ga želimo dodati. Vsi elementi za tem mestom se premaknejo za eno mesto naprej.
stevilke.insert(1, 5)
print(stevilke) # [1, 5, 2, 3, 4]
Če poskušamo seznamu dodati seznam, se bo seznam dodal kot element. Če želimo dodati elemente seznama, moramo uporabiti metodo extend.
stevilke.append([6, 7])
print(stevilke) # [1, 5, 2, 3, 4, [6, 7]]
stevilke = stevilke[:-1] # odstranimo zadnji element
stevilke.extend([6, 7])
print(stevilke) # [1, 5, 2, 3, 4, 6, 7]
Odstranjevanje elementov
Z uporabo metode pop lahko odstranimo element na določenem indeksu. Metoda pop vrne odstranjeni element. Z metodo remove pa odstranimo prvi element, ki se ujema z vrednostjo, ki jo podamo kot argument.
stevilke = [1, 2, 3, 4, 5, 6, 7, 8, 8]
stevilke.pop(0) # odstrani 1
stevilke.pop(5) # odstrani 7
stevilke.remove(8) # odstrani prvo 8
print(stevilke) # [2, 3, 4, 5, 6, 8]
Operacije s seznami
Sezname lahko seštevamo, množimo in preverjamo ali vsebujejo elemente.
stevilke = [1, 2, 3]
stevilke = stevilke + [4, 5, 6]
print(stevilke) # [1, 2, 3, 4, 5, 6]
stevilke = stevilke * 2
print(stevilke) # [1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6]
print(1 in stevilke) # True
print(10 in stevilke) # False
Še nekaj uporabnih metod
clear()- odstrani vse elemente iz seznamacount(arg)- vrne število pojavitev elementaargv seznamuindex(arg)- vrne indeks prvega elementa, ki se ujema zargreverse()- obrne vrstni red elementov v seznamusort()- uredi elemente seznamalen(seznam)- vrne število elementov v seznamu
Napredno
Posebnosti pri delu s seznami
Seznami so samo naslovi na podatke v pomnilniku, tako da imamo lahko več spremenljivk, ki kažejo na isti seznam. Če spremenimo eno spremenljivko, se spremeni tudi druga.
seznam1 = [1, 2, 3]
seznam2 = seznam1
seznam1[0] = 5
print(seznam1) # [5, 2, 3]
Prav tako moramo biti pozorni, ko sezname podajamo kot argumente funkcijam. Če funkcija spremeni seznam, se bo spremenil tudi izven funkcije.
def dodaj_element(seznam):
seznam.append(5)
seznam = [1, 2, 3, 5]
dodaj_element(seznam)
print(seznam) # [1, 2, 3, 5]
Večdimenzionalni seznami
Seznam lahko vsebuje tudi druge sezname. Tako dobimo večdimenzionalni seznam. V tem primeru je indeksiranje malo bolj zapleteno.
tic_tac_toe = [
["X", "O", "X"],
["O", "X", "O"],
["X", "O", "X"]
]
print(tic_tac_toe[0]) # ["X", "O", "X"]
print(tic_tac_toe[0][0]) # "X"