La funzione map di Python

Di mech06


Pubblicato Lunedì 13 Aprile 2020 17:46


Map è una delle funzioni più comode di python ( così come le due "cugine" filter e reduce ), molto utile quando si devono effettuare delle operazioni su delle liste con pochissime righe di codice. Vediamone subito l'impiego.

Se dovessimo moltiplicare per una data costante tutti gli elementi di un array potremmo semplicemente fare:


list( map( lambda x : x*2, [ 1, 2, 3 ] ) )
# Output: [2,4,6] 

Non curiamoci ora della funzione list, la cui applicazione in questo caso è spiegata a fine articolo

Allo stesso modo map può gestire tanti array quanti gliene passiamo, ( a patto però che la funzione lambda accetti tutti questi parametri!! ), vediamo un esempio:


list( map( lambda x,y : x+y, [ 1, 2, 3 ], [ 1, 2, 3 ] ) )
# Output: [2,4,6] 

E se gli array non hanno la stessa dimensione? Il map farà il suo lavoro smettendo di ciclare quando l'array più corta sarà finita, riprendiamo l'esempio precedente modificandolo un poco per chiarire:


list( map( lambda x,y : x+y, [ 1, 2 ], [ 1, 2, 3 ] ) )
# Output: [2,4] 

In tutti gli esempi precedenti abbiamo usato la funzione lambda per eseguire delle operazioni sulla/sulle liste in quanto queste operazioni erano semplici, ma se lambda non dovesse bastare perché ad esempio dobbiamo fare qualcosa di più complesso? Possiamo sempre sostituire lambda con una funzione python precedentemente definita.

Riprendiamo l'esempio della somma delle array e modifichiamolo:


def somma( x, y ):
    return x + y

list( map ( somma, [1,2,3],[1,2,3]) )
# Output: [2,4,6] 

In questo esempio sono evidenti due cose, la prima è che la funzione lambda ora lascia il posto alla funzione somma la quale viene passata a map, la seconda è che in realtà questo esempio non è molto più complesso degli altri...ma la scusa ci è servita per vedere come passare funzioni a map! :-P

In chiusura una doverosa precisazione, map in python 3 è differente da python 2. Quando chiamiamo map in python 2 non abbiamo bisogno di invocare anche la funzione list perchè viene già restituita un'array.

Ed in python 3? Se togliessimo list le cose sarebbero ben diverse:


map( lambda x : x*2, [ 1, 2, 3 ] ) 
# Output: <map at 0x7f5219e52e48> 

Come vediamo non viene restituita un'array ma un oggetto in memoria chiamato map che rappresenta un iteratore. Per tirare fuori i dati da questo iteratore dobbiamo invocare su di esso una funzione in grado di gestirlo e list fa proprio questo, prende l'iteratore creato da map, lo scorre e così facendo ne tira fuori i dati.

Se per esempio avessimo voluto una tupla invece di un'array, avremmo potuto semplicemente utilizzare la funzione tuple al posto di list:


tuple( map( lambda x : x*2, [ 1, 2, 3 ] ) )
# Output: (2,4,6)

E' tutto per questo articolo...buone "mappature" a tutti! :-)


Torna alla home

Oppure esplora gli altri articoli sugli stessi argomenti:

#Python