Naloge
Seznam imen
Napiši funkcijo capitalize(xs)
, ki sprejme seznam imen in vrne nov
seznam, v katerem se vsa imena začnejo z veliko začetnico. Pomagaj si z
metodo nizov capitalize()
. Seznam xs
mora ostati po klicu funkcije
nespremenjen.
>>> imena = ['marko', 'Miha', 'maja', 'Monika']
>>> capitalize(imena)
['Marko', 'Miha', 'Maja', 'Monika']
>>> imena
['marko', 'Miha', 'maja', 'Monika']
Rešitev
def capitalize(xs):
ys = []
for x in xs:
ys.append(x.capitalize())
return ys
Napiši funkcijo icapitalize(xs)
, ki podani seznam spremeni tako, da
se vsa imena začnejo z veliko začetnico.
>>> imena = ['marko', 'Miha', 'maja', 'Monika']
>>> icapitalize(imena)
>>> imena
['Marko', 'Miha', 'Maja', 'Monika']
Rešitev
def icapitalize(xs):
for i in range(len(xs)):
xs[i] = xs[i].capitalize()
Zamenjave
Napiši funkcijo zamenjano(s, menjave)
, ki prejme seznam s
in slovar
menjave
. Vrne naj nov seznam, v katerem so vsi elementi seznama, ki
nastopajo kot ključi v slovarju, zamenjani s pripadajočimi vrednostmi.
Elemente, ki se ne pojavijo v slovarju, pusti pri miru. Funkcija
zamenjano
ne sme spremeniti podanega seznama s
.
>>> zamenjano(["Ana", "Ana", "Berta", "Ana", "Cilka"], {"Ana": "Peter", "Berta": "Ana"})
["Peter", "Peter", "Ana", "Peter", "Cilka"]
Poleg tega napiši podobno funkcijo zamenjaj(s, menjave)
, ki pa ne vrne
ničesar temveč ustrezno spremeni podani seznam s
.
>>> imena = ["Ana", "Ana", "Berta", "Ana", "Cilka"]
>>> zamenjaj(imena, {"Ana": "Peter", "Berta": "Ana"})
>>> imena
["Peter", "Peter", "Ana", "Peter", "Cilka"]
Rešitev
def zamenjano(seznam, menjave):
return [menjave.get(e, e) for e in seznam]
def zamenjaj(seznam, menjave):
seznam[:] = zamenjano(seznam, menjave)
Alterniraj
Napiši funkcijo alterniraj(s)
, ki prejme seznam števil in ga spremeni
tako, da za vsakim pozitivnim številom odstrani vsa števila do
naslednjega negativnega števila, in za vsakim negativnim vsa števila do
naslednjega pozitivnega. Funkcija naj spremeni podani seznam in ne vrne
ničesar. Z drugimi besedami, funkcija obdrži prvi element vsakega
zaporedja pozitivnih ali negativnih števil.
>>> seznam = [3, 4, -1, 1, -5, -2, -1, 7, -8]
>>> alterniraj(seznam)
>>> seznam
[3, -1, 1, -5, 7, -8]
Rešitev
def alterniraj(x):
n = []
for e in x:
if not n or e * n[-1] < 0:
n.append(e)
x[:] = n
Podvoji
Tvoja naloga je napisati dve različici funkcije, ki podvoji seznam
seznamov: iz [[1,2],[3],[7,1,2]]
nastane
[[1,2],[3],[7,1,2],[1,2],[3],[7,1,2]]
. Funkcije spreminjajo podani
seznam in ne vračajo ničesar.
Funkcija dodaj_isti(s)
naj podvoji seznam tako, da dodaja na konec
iste elemente, funkcija dodaj_enak(s)
pa enake (vendar ne iste).
Glej naslednja primera:
>>> s = [[1,2],[3],[7,1,2]]
>>> dodaj_isti(s)
>>> s[0].clear()
>>> s
[[],[3],[7,1,2],[],[3],[7,1,2]]
>>> s = [[1,2],[3],[7,1,2]]
>>> dodaj_enak(s)
>>> s[0].clear()
>>> s
[[],[3],[7,1,2],[1,2],[3],[7,1,2]]
Rešitev
def dodaj_isti(s):
for i in range(len(s)):
s.append(s[i])
def dodaj_enak(s):
for i in range(len(s)):
s.append(list(s[i]))
Duplikati
Napiši funkcijo poenoti(s)
, ki bo spremenila podani seznam s
tako,
da bodo enaki elementi seznama pravzaprav isti.
>>> s = [[1,2],[3],[1,2],[1,2],[3]]
>>> poenoti(s)
>>> s[2].append(9)
>>> s
[[1, 2, 9], [3], [1, 2, 9], [1, 2, 9], [3]]
Z obratnim problemom se srečamo, če želimo na hitro ustvariti seznam
seznamov, npr. s = [[]]*10
. Napiši funkcijo razenoti(s)
, ki bo
poskrbela, da v seznamu ne bo istih elementov (zamenjala jih bo z
enakimi).
>>> s = [[]]*10
>>> s[0].append(1)
>>> s
[[1], [1], [1], [1], [1], [1], [1], [1], [1], [1]]
>>> razenoti(s)
>>> s[1].append(2)
>>> s
[[1], [1, 2], [1], [1], [1], [1], [1], [1], [1], [1]]
Rešitev
def poenoti(s):
for i in range(len(s)):
s[i] = s[s.index(s[i])]
def razenoti(s):
for i in range(len(s)):
s[i] = list(s[i])
Slikaj
Napišite funkcijo slikaj
, ki sprejme funkcijo f
in
seznam [x_1, x_2, ..., x_n]
in vrne nov
seznam [f(x_1), f(x_2), ..., f(x_n)]
.
>>> slikaj(abs, [-5, 8, -3, -1, 3])
[5, 8, 3, 1, 3]
>>> slikaj(len, "Daydream delusion limousine eyelash".split())
[8, 8, 9, 7]
Rešitev
def slikaj(f, s):
return [f(x) for x in s]