Python — mapuj, filtruj, redukuj
MAPA
Po pierwsze, zrozummy, dlaczego dokładnie potrzebujemy funkcji mapy i jak pomaga nam to zredukować naszą pracę i zwiększyć wydajność naszego kodu.
Załóżmy, że mamy listę do pracy, jak poniżej, ale problem z listą polega na tym, że wszystkie obecne na niej elementy są w formacie łańcuchowym, więc jeśli spróbujemy wykonać jakiekolwiek operacje numeryczne, nie przyniesie to żadnego wyniku.
l1 = ["3","5","9","12","25"]
x = l1[0]+1
print(x)
----------------------------------------------------------------------
-----
TypeError Traceback (most recent call
last)
Input In [1], in <cell line: 2>()
1 l1 = ["3","5","9","12","25"]
----> 2 x = l1[0]+1
3 print(x)
TypeError: can only concatenate str (not "int") to str
Teraz jednym ze sposobów obejścia tego jest pętla for, spójrzmy
for i in range(len(l1)):
l1[i] = int(l1[i])
x = l1[0]+1
print(x)
4
Weźmiemy inną listę o nazwie l2 i ponownie wykonamy tę samą operację.
l2 = ["3","5","9","12","25"]
l2 = list(map(int,l2))
y = l2[0]+1
print(y)
4
Przyjrzyjmy się teraz również kilku innym przykładom, załóżmy, że chcemy znaleźć wartości kwadratowe całej listy, zobaczmy, jak możemy to zrobić za pomocą funkcji map.
Najpierw napiszmy funkcję 'sq', która zwróci podaną do kwadratu wartość podanej liczby
def sq(a):
return a*a
l3 = [3,5,7,2,9]
l4 = list(map(sq,l3))
print(l4)
[9, 25, 49, 4, 81]
Teraz spójrzmy na coś bardziej skomplikowanego, co próbujemy teraz osiągnąć, to uzyskać kwadrat i sześcian liczb z 0,8, zapisane na liście. Użyjemy teraz funkcji map, funkcji lambda, a także naszego słowa kluczowego def, aby opisać funkcje kwadratu i sześcianu. Następnie użyjemy pętli for do utworzenia listy.
def sq(a):
return a*a
def cube(a):
return a*a*a
func = [sq,cube]
for i in range(8):
rslt = list(map(lambda x:x(i) ,func))
print(rslt)
[0, 0]
[1, 1]
[4, 8]
[9, 27]
[16, 64]
[25, 125]
[36, 216]
[49, 343]
Jak sama nazwa wskazuje, funkcja filter pomaga nam w filtrowaniu zadanego zbioru iterowalnych, jako argument przyjmuje podaną funkcję na podstawie której będziemy filtrować nasze iterowalne a następnie jako argumenty przyjmuje same iterowalne. Poniżej podano 3 typy filtrów, jeden będzie filtrował liczby większe niż 10 z listy, jeden będzie filtrował liczby mniejsze niż 10, a jeden będzie miał wielokrotne warunkowanie, które stwierdza, że liczba powinna być większa niż 10, ale mniejsza niż 15.
l1 = [34,12,5,8,11,14,19,10,1,50]
def grt_condi(num):
return num>10
def lsr_condi(num):
return num<10
def multi_condi(num):
return num>10 and num<15
l2 = list(filter(grt_condi,l1))
l3 = list(filter(lsr_condi,l1))
l4 = list(filter(multi_condi,l1))
print(l2)
print(l3)
print(l4)
[34, 12, 11, 14, 19, 50]
[5, 8, 1]
[12, 11, 14]
Zrozummy, co robi funkcja reduce i jaki problem rozwiązuje, aby to zrozumieć, najpierw weźmy opis problemu i nasze tradycyjne obejście w rozwiązaniu tego problemu.
Powiedzmy, że istnieje lista i chcemy uzyskać sumę wszystkich liczb całkowitych obecnych na liście
l6 = [2,3,6,5,8,9,10]
x = 0
for i in l6:
x = x+i
print(x)
43
from functools import reduce
l7 = reduce(lambda x,y:x+y , l6)
print(l7)
43
Aby uzyskać więcej takich treści, śledź mój profil Medium i stronę LinkedIn —https://www.linkedin.com/in/chandan-sengupta/

![Czym w ogóle jest lista połączona? [Część 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































