Python: mappa, filtra, riduci
CARTA GEOGRAFICA
Innanzitutto, cerchiamo di capire perché esattamente abbiamo bisogno di una funzione map e come ci aiuta a ridurre il nostro lavoro e rendere il nostro codice più efficiente.
Supponiamo di avere un elenco su cui lavorare come di seguito, ma il problema con l'elenco è che tutti gli elementi presenti in esso sono in formato stringa, quindi se proviamo a eseguire operazioni numeriche, non produrrà alcun risultato.
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
Ora un modo per aggirare questo è un ciclo for, diamo un'occhiata
for i in range(len(l1)):
l1[i] = int(l1[i])
x = l1[0]+1
print(x)
4
Prenderemo un'altra lista chiamata l2 ed eseguiremo di nuovo la stessa operazione.
l2 = ["3","5","9","12","25"]
l2 = list(map(int,l2))
y = l2[0]+1
print(y)
4
Ora diamo un'occhiata anche ad alcuni altri esempi, supponiamo di voler scoprire i valori quadrati di un intero elenco, vediamo come possiamo farlo con l'aiuto della funzione map.
Innanzitutto, scriviamo una funzione 'sq' che restituirà il valore al quadrato di un dato numero
def sq(a):
return a*a
l3 = [3,5,7,2,9]
l4 = list(map(sq,l3))
print(l4)
[9, 25, 49, 4, 81]
Ora esaminiamo qualcosa di più complicato, quello che stiamo cercando di ottenere ora è ottenere il quadrato e il cubo dei numeri da 0,8, memorizzati in un elenco. Useremo la funzione map, la funzione lambda e anche la nostra parola chiave def per descrivere ora le funzioni quadrato e cubo. Quindi useremo un ciclo for per creare l'elenco.
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]
Come suggerisce il nome, la funzione filter ci aiuta a filtrare un dato insieme di iterables , come argomento prende la funzione dichiarata in base alla quale filtreremo i nostri iterables e poi prende gli iterables stessi come argomenti. Di seguito vengono forniti 3 tipi di filtri, uno filtrerà i numeri maggiori di 10 dall'elenco, uno filtrerà i numeri inferiori a 10 e uno avrà un condizionamento multiplo che indica che il numero dovrebbe essere maggiore di 10 ma minore di 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]
Capiamo cosa fa la funzione di riduzione e quale problema risolve, per capirlo, prendiamo prima una dichiarazione del problema e il nostro tradizionale walkaround per risolverlo.
Diciamo che c'è una lista e vogliamo ottenere la somma di tutti i numeri interi presenti nella lista
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
Per ulteriori contenuti di questo tipo, segui il mio profilo Medium e la pagina LinkedIn —https://www.linkedin.com/in/chandan-sengupta/

![Che cos'è un elenco collegato, comunque? [Parte 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































