In python esiste una funzione built-in chiamata map() che prende in ingresso una o più liste e una funzione. Per ogni elemento presente in ciascuna lista specificata, viene applicata la funzione indicata. Infine avremo come output da map una nuova lista.

Sintassi

lista_output = map(funzione_da_applicare, lista_input)

Se volessi utilizzare la funzione map() per ottenere il quadrato di ogni numero presente in una lista dovrei procedere in questo modo:

def quadrato(x):
return x ** 2

lista_quadrati = list(map(quadrato, [1, 2, 3, 4, 5, 6]))
print(lista_quadrati)

#output
[1, 4, 9, 16, 25, 36]

In questo caso, impiegando solamente un oggetto(una sola lista), in output avrò una nuova lista della stessa lunghezza di quella precedente.

Differenze tra map() e for loop

La stessa operazione può essere replicata utilizzando un ciclo for:

lista_numeri = [1, 2, 3, 4, 5, 6]
lista_numeri_al_quadrato = []
for numero in lista_numeri:
lista_numeri_al_quadrato.append(numero ** 2)

print(lista_numeri_al_quadrato)

#output
[1, 4, 9, 16, 25, 36]

Possiamo notare quindi delle differenze, in quest'ultimo caso vengono utilizzate 5 righe rispetto alle 3 precedenti, in quanto bisogna dichiarare la lista prima di iniziare il for loop, inoltre sfruttando la funzione built-in avremmo una maggiore ottimizzazione del codice.

Passare più di una lista

Come accennato inizialmente, è possibile impiegare anche più di una sequenza di elementi. In questo caso la funzione dovrà avere tanti parametri in ingresso quanto sono le liste specificate(se ne ho due, la funzione avrà due parametri in ingresso) e gli elementi di ogni sequenza verranno processati in parallelo:

def somma_numeri(elemento_lista_1, elemento_lista_2):
return elemento_lista_1 + elemento_lista_2

res = list(map(somma_numeri, [1, 2, 3, 4, 5], [4, 2, 1, 0, 8]))
print(res)

#output
[5, 4, 4, 4, 13]

Qualora le liste abbiano una lunghezza diversa tra loro, verranno processati gli elementi fino all'esaurimento della lista più piccola:

res = list(map(somma_numeri, [3, 7, 5], [1, 2, 3, 4, 5, 6, 7]))
print(res)

#output
[4, 9, 8]

Utilizzare funzioni lambda

Come moltiplicare per due ogni elemento di una lista implementando una funzione lambda:

>>> list(map(lambda x: x*2, [1, 2, 3, 4, 5]))
[2, 4, 6, 8, 10]

Condividi sui Social