4  Seznami in nizi

Gradiva za to poglavje so:

Indeksiranje

Indeksi morajo biti cela števila, sicer pride do napake. Indeksi se začnejo z 0 (prvi element). Negativni indeksi so indeksi šteti s konca seznama proti začetku (-1 je indeks zadnjega elementa, -2 predzadnjega). Če podamo indeks, ki je večji od indeksa zadnjega elementa, Python javi IndexError.

spam = ['cat', 'bat', 42, True, 'dog']
print(spam[2])
print(spam[-2])
42
True

Podsezname dobimo s sintakso seznam[zacetni_indeks:koncni_indeks:korak]. Nobeno od teh treh števil ni obvezno.

spam = ['cat', 'bat', 42, True, 'dog']
print(spam[1:4:2])
print(spam[:3])
print(spam[::2])
print(spam[::-1])
['bat', True]
['cat', 'bat', 42]
['cat', 42, 'dog']
['dog', True, 42, 'bat', 'cat']

Podobno je za nize.

spam = "besedna zveza"
print(spam[2])
print(spam[1:4])
print(spam[:3])
print(spam[::2])
print(spam[::-1])
s
ese
bes
bsdazea
azevz andeseb

Dolžina

Število elementov seznama ali število znakov v nizu dobimo s funkcijo len(seznam_ali_niz).

c = [1, 2, 3, "abeceda"]
print(len(c))

d = "terminologija"
print(len(d))
4
13

Združevanje

Več seznamov / več nizov staknemo s plusom.

sez1 = [1, 2, 3]
sez2 = [4, 5, 6]
print(sez1 + sez2)

niz1 = "a"
niz2 = "b"
print(niz1 + niz2)
[1, 2, 3, 4, 5, 6]
ab

Sezname lahko združimo tudi z metodo extend. Za zgornji primer: seznam1.extend(seznam2).

Preverjanje vsebovanja

S ključno besedo in preverimo ali seznam vsebuje nek element, kar lahko uporabimo npr. v if stavku. Podobno lahko z in preverimo ali niz vsebuje nek znak.

print('cat' in ['cat', 'bat', 42, True, 'dog'])
print('c' in 'beseda')
True
False

Zanke

Po elementih seznama / znakih niza se lahko sprehodimo z zanko for.

spam = ['cat', 'bat', 42, True, 'dog']
for element in spam:
    print(element)
cat
bat
42
True
dog
spam = "abc"
for element in spam:
    print(element)
a
b
c

Ko v zanki potrebujemo indekse, pride prav spodnji pristop, kjer do elementov seznama dostopamo z indeksi.

Primer: zanima nas razlika med zaporednimi elementi seznama.

seznam = [1, 2, 3, 5, 6, 7]
for i in range(len(seznam) - 1):
    print(seznam[i+1] - seznam[i])
1
1
2
1
1

Tretji pristop k sprehodu po elementih seznama / znakih niza pa je funkcija enumerate (glej dno te strani za primer).

Spreminjanje

Vrednost elementa v seznamu lahko spremenimo.

spam = ['cat', 'bat', 42, True, 'dog']
spam[1] = 'aardvark'
print(spam)
['cat', 'aardvark', 42, True, 'dog']

V nizu znakov ne moremo tako spreminjati! Uporabimo pa lahko podsezname:

s = "abcdef"
index = 3
s = s[:index] + "ž" + s[index + 1:]
print(s)
abcžef

Elemente seznama lahko zbrišemo s ključno besedo del.

spam = ['cat', 'bat', 42, True, 'dog']
del spam[2]
print(spam)
['cat', 'bat', True, 'dog']

Dodajanje elementov

Element lahko dodamo na konec seznama z metodo append.

spam = ['cat', 'bat', 42, True, 'dog']
spam.append(3)
print(spam)
['cat', 'bat', 42, True, 'dog', 3]

Pri nizih ne moremo uporabiti metode append, lahko pa dodamo elemente z operatorjem +. Tudi tu lahko uporabimo okrajšavo +=.

s = "abcd"
s += "e" # oziroma s = s + "e"
print(s)
abcde

Nekaj uporabnih funkcij

  • len(seznam_ali_niz) vrne število elementov seznama oz. število znakov v nizu

  • enumerate(seznam) vrne zaporedje parov, v katerih so na drugem mestu vrednosti iz podanega seznama, na prvem mestu pa so njihovi indeksi. Funkcija vrne poseben tip - da dobimo seznam, moramo ta tip pretvoriti s funkcijo list(). V for zanki lahko uporabimo enumerate brez list.

print(list(enumerate(["a", "b", "c"])))
[(0, 'a'), (1, 'b'), (2, 'c')]
for indeks, element in enumerate(["a", "b", "c"]):
    print(indeks, element)
0 a
1 b
2 c
  • zip(seznam1, seznam2, ...) vrne zaporedje naborov istoležnih elementov v podanih seznamih. Funkcija vrne poseben tip - da dobimo seznam, moramo ta tip pretvoriti s funkcijo list(). V for zanki lahko uporabimo zip brez list.
print(list(zip('xyz', [10, 20, 30], [4, 5, 6])))
[('x', 10, 4), ('y', 20, 5), ('z', 30, 6)]
for x in zip('xyz', [10, 20, 30], [4, 5, 6]):
    print(x)
('x', 10, 4)
('y', 20, 5)
('z', 30, 6)