Podseznami

Report
Python - seznami
podseznami
Elementi
Dobimo nove sezname, oz. elemente
a[i]
i-ti element seznama a.
Elemente štejemo od 0 naprej.
Če je i negativen, potem štejemo od konca
seznama proti začetku
seznam = [10, 20, 30, 40]
seznam[-1]
40
seznam[len(seznam) – 1]
seznam[-3] == seznam[4 – 3] == 20
2
Podseznami
Dobimo nove sezname, oz. elemente
T.i. rezanje ali kosanje (slicing)
Seznam, ki ga režemo, se ne spremeni
seznam = [10, 20, 30, 40]
srednjaDva = seznam[1:3]
a[i:j]
Podseznam od i-tega do j-tega elementa (j-ti element ni več zraven).
Če spustimo i, se podseznam prične na začetku, če spustimo j, pa
konča na koncu.
a[i:j] je [ai, ai+1, ..., aj-1]
a[:j] je [a0, a1, ..., aj-1]
a[i:] je [ai, ai+1, ..., an-1], kjer je n število elementov v seznamu a
a[:] je [a0, a1, ..., an-1], kjer je n število elementov v seznamu a
3
Le zakaj sez[j] "ni zraven"?
Le zakaj je za
sez = ['a','b','c','d']
res tole
sez [2:3] == ['c']
in
sez[3:3] == []
Hm, morda …
sez == sez[0:2] + sez[2:len(sez)]
kopija = sez[0:len(sez)]
In sez[i:j] je seznam s koliko elementi?
j – i
Na "drugo žogo" stvar le ni tako "nelogična"
4
Rezanje
Lahko razmišljamo tudi takole
Meje rezin ne jemljemo kot indeks elementov
Ampak kot mesto možnih rezov
0
1
NED
2
PON
3
TOR
4
SRE
5
ČET
6
PET
7
SOB
delovniDnevi = teden[1:6]
5
Rezanje, negativni indeksi
Uporabljamo lahko tudi negativne indekse
delovniDnevi = teden[1:-1]
Spustimo prvega in zadnjega
sez[:2] … prva dva
sez[:-2] … vsi, razen zadnjih dveh
sez[3 : ] … vsi, razen prvih treh
sez[-2:] … zadnja dva
sez[2:-2] … spustimo prva dva in zadnja dva
6
Rezanje vrača nove sezname
>>> seznam
[10, 20, 30, 40]
>>> novSez = seznam[2:4]
>>> novSez
[30, 40]
>>> seznam
[10, 20, 30, 40]
In zato:
kopija = sez[:]
Dobimo pravo kopijo in ne "alias"
7
Pozor
>>> seznam
[10, 20, 30, 40]
>>> seznamBrez = seznam[0:1]
+ seznam[len(seznam) -1 :
len(seznam)]
>>> seznamBrez
[10, 40]
>>> seznamZadnja = seznam[0]
>>> seznamZadnja
50
>>>
+ seznam[len(seznam) - 1]
8
Podseznami
a[i:j:k]
Podseznam od i-tega do j-tega elementa (j-ti element ni več zraven), pri
čemer vzamemo vsak k-ti element
a[i:j:k] je [ai, ai+k, ai+2k, ...] do j-tega elementa
seznam = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
večkratniki3 = sez[2:9:3]
liha =seznam[0:len(sez):2]
liha =seznam[::2]
soda=seznam[1::2]
>>>
[1,
[3,
[1,
[2,
print(seznam, večkratniki3, liha, soda, sep = '\n')
2, 3, 4, 5, 6, 7, 8, 9, 10]
6, 9]
3, 5, 7, 9]
4, 6, 8, 10]
9
Kaj pa tole?
seznam = ['Andrej', 'Bojan', 'Cene',
'Darko', 'Egon', 'Franc']
seznam[len(seznam)::-1]
seznam[::-1]
seznam[-2:]
def kajPočnem(seznam):
return seznam == seznam[::-1]
10
Uporaba rezanja za vrivanje
Vstavi (vrini) element na mesto 4
seznam = ['Andrej', 'Bojan', 'Cene',
'Darko', 'Egon', 'Franc']
seznam = seznam[:4] + 'Dejan' +
seznam[4:]
No, gre tudi (celo hitreje) z
seznam.insert(4, 'Dejan')
Prej:
Naredili nov seznam in ga potem "shranili" v seznam
Potem
Spremenili obstoječ seznam
11
In brisanje
seznamFantov = ['Andrej', 'Bojan',
'Cene', 'Darko', 'Egon', 'Franc']
Bojan in Cene sta se poročila
seznamFantov = seznamFantov[:1] +
seznamFantov[3:]
ali pa
del seznamFantov[1:3]
ali pa
seznamFantov[1:3] = []
12
In zamenjavo (ter dodajanje)
seznamFantov = ['Andrej', 'Bojan',
'Cene', 'Darko', 'Egon', 'Franc']
Bojan in Cene sta postala 'Brane' in 'Centa'
seznamFantov[1:3] = ['Brane',
'Centa']
Franc je sedaj France, v klub pa je pripeljal še
Gregorja
seznamFantov[-1:] = ['France',
'Gregor']
13

similar documents