130 likes | 357 Views
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]
E N D
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
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
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"
Rezanje • Lahko razmišljamo tudi takole • Meje rezin ne jemljemo kot indeks elementov • Ampak kot mesto možnih rezov • delovniDnevi = teden[1:6] 0 1 2 3 4 5 6 7 NED PON TOR SRE ČET PET SOB
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
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"
Pozor • >>> seznam • [10, 20, 30, 40] • >>> seznamBrez = seznam[0:1] + seznam[len(seznam) -1 : len(seznam)] • >>> seznamBrez • [10, 40] • >>> seznamZadnja = seznam[0] + seznam[len(seznam) - 1] • >>> seznamZadnja • 50 • >>>
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] • >>> print(seznam, večkratniki3, liha, soda, sep = '\n') • [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] • [3, 6, 9] • [1, 3, 5, 7, 9] • [2, 4, 6, 8, 10]
Kaj pa tole? • seznam = ['Andrej', 'Bojan', 'Cene', 'Darko', 'Egon', 'Franc'] • seznam[len(seznam)::-1] • seznam[::-1] • seznam[-2:] • defkajPočnem(seznam): • return seznam == seznam[::-1]
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
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] = []
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']