Transcript Podseznami

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 [a i , a i+1 , ..., a j-1 ] a[:j] je [a 0 , a 1 , ..., a j-1 ] a[i:] je [a i , a i+1 , ..., a n-1 ], kjer je n število elementov v seznamu a a[:] je [a 0 , a 1 , ..., a n-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 NED 1 PON 2 TOR 3 SRE 4 ČET 5 PET 6 SOB 7 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] + seznam[len(seznam) - 1] >>> seznamZadnja 50 >>> 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 [a i , a i+k , a i+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] 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