• Register

Funkciji map in filter

+9 votes
399 views
Kako naj uporabim funkciji map in filter?
asked Mar 1, 2016 by tomsic.luka (300 points)

5 Answers

+6 votes
 
Best answer
Odlično vprašanje, vendar Map in Filter predstavljata zastareli pristop (zato sploh nisem omenil na predavanjih). Uporabite raje izpeljevanje seznamov / list comprehensions.

Ps: detajli v drugih predavanjih.
answered Mar 1, 2016 by janko.slavic (80,790 points)
edited Mar 1, 2016 by janko.slavic
+4 votes
Jaz sem to naredil tako, da sem najprej zapisal seznam z nekaj vrednostmi. Nato pa sem zapisal kodo: list(filter(lambda x: -x+1 , seznam)), filter ti izpiše številke ki ustrezajo enačbi lambda funkcije, v kolikor namesto filter zapišeš map, pa dobiš izračunane vrednosti.
answered Mar 1, 2016 by Rok Štante (820 points)
+1 vote
https://docs.python.org/3/howto/functional.html   Tukaj poglej, je lepo pokazano.
answered Mar 1, 2016 by lukas (950 points)
+6 votes

Map funkcija vzame podano spremenljivko x ter določeni funkciji priredi ustrezen rezultat.


Primer:
funkcija = lambda x : x*(-1)+1
vrednosti = [1,2,3,4,5]
odgovori = list(map(funkcija, vrednosti))
print(odgovori)
Out[1]: [0, -1, -2, -3, -4]

Filter funkcija v osnovi deluje podobno kot map, le da izbere (filtrira) primerne rezultate (npr. tiste, ki so <7)


Primer:

def funkcija_2(element):
    return element<7

vrednosti_2 = [5,6,7,8,9,10]

odgovori_2 = list(filter(funkcija_2, vrednosti_2))

print(odgovori_2)

Out[2]: [5,6]

 

answered Mar 1, 2016 by DusanP (610 points)
V kolikor želite na koncu dobiti seznam (list) in vas ne zanima zgolj iterator, je bolj elegantno, da uporabite kar izpeljevanje seznamov:

[-x+1 for x in vrednosti]  # namesto list(map(funkcija, vrednosti))

[x for x in vrednosti_2 if x < 7]  # namesto list(filter(funkcija_2, vrednosti_2))
+5 votes
Funkcija filter filtrira rezultate, ki so False(če je rezultat funkcije False: če je 0, None, prazen seznam...)
Map pa posreduje vse rezultate funkcije glede na podan seznam.
answered Mar 1, 2016 by bojan.tomsic (340 points)
...