Python map() Funzione, spiegata con esempi

In questo tutorial imparerai come usare la funzione Python map() per applicare una funzione a tutti gli elementi di un iterabile.

Python supporta il paradigma di programmazione funzionale che consente di definire le attività come calcolo di funzioni a livello di codice. Puoi trattare le funzioni Python come oggetti: una funzione può prendere un’altra funzione come parametro e restituire un’altra funzione.

La funzione map() accetta una funzione come argomento e ti consente di applicarla a tutti gli elementi in una sequenza.

Alla fine di questo tutorial, sarai in grado di utilizzare la funzione Python map() — per riscrivere cicli dettagliati ed elencare le comprensioni. Codificherai diversi esempi per comprendere i diversi modi in cui puoi utilizzare la funzione map().

Come applicare una funzione agli elementi di un elenco Python

Iniziamo la nostra discussione con un esempio.👩‍🏫

Qui nums è un elenco di numeri.

nums = [2,4,3,7]

Quindi, considera la funzione self_pow(). La funzione self_pow() accetta un numero come argomento e restituisce il numero elevato alla potenza del numero stesso: n**n.

In Python, ** è l’operatore di esponenziazione. a**b restituisce il valore di a elevato alla potenza b, ab.

def self_pow(n):
  return n**n

DA FARE: creare una nuova lista nums_pow applicando la funzione self_pow() a ogni elemento della lista nums.

Usando per Loop

Per fare ciò, puoi usare for loop in Python:

  • Per ogni numero nell’elenco dei numeri, chiama la funzione self_pow() con num come argomento.
  • Aggiungi il risultato della chiamata di funzione al nuovo elenco nums_pow.
nums_pow = []

for num in nums:
  nums_pow.append(self_pow(num))

print(nums_pow)

Nell’output, ogni numero nums viene elevato a se stesso. Gli elementi nell’elenco nums_pow sono i seguenti: 22, 44, 33,77.

Output
[4, 256, 27, 823543]

Utilizzo della comprensione dell’elenco

Puoi renderlo conciso usando la comprensione dell’elenco. Dal ciclo for esplicito sopra, possiamo identificare l’espressione di output e l’elenco da scorrere.

Possiamo quindi modificare l’espressione generica di comprensione dell’elenco:

new_list = [<output expression> for item in iterable]

L’espressione di comprensione dell’elenco per generare l’elenco nums_pow è la seguente:

nums_pow = [self_pow(num) for num in nums]
print(nums_pow)

L’output è lo stesso dell’utilizzo di cicli for, come previsto.

Output
[4, 256, 27, 823543]

Invece della comprensione di cicli e liste, puoi usare la funzione Python map() con una sintassi concisa e aiuta ad applicare la funzione a tutti gli elementi in un iterabile. Iniziamo imparando la sintassi della funzione map.

Python map() Sintassi della funzione

La sintassi generale per utilizzare la funzione Python map() è la seguente:

map(function, iterable_1,[iterable_2,...,iterable_n])

La funzione map() accetta almeno due argomenti, una funzione e un iterabile.

Nella sintassi sopra:

  • function denota una funzione Python o, in generale, qualsiasi Python richiamabile. Ciò include funzioni, classi, istanze e metodi di classe predefiniti dall’utente e altro ancora.
  • iterable è qualsiasi iterabile Python valido, come una lista, una tupla e una stringa.
  • La funzione map() si applica e la funzione viene utilizzata per ogni elemento nell’iterabile.

Cosa restituisce la funzione map()?

Restituisce un oggetto mappa. È quindi possibile eseguire il cast dell’oggetto mappa in un elenco utilizzando la sintassi: list(map(function,iterable)).

A seconda del caso d’uso, puoi eseguirne il cast in una tupla Python.

Ora che hai imparato la sintassi della funzione Python map(), iniziamo a codificare esempi.

Dovresti avere Python 3.x per seguire questo tutorial. Altrimenti, puoi eseguire i frammenti di codice nell’editor Python online di winadmin.it.

Come utilizzare la funzione map() con le funzioni definite dall’utente

# 1. In precedenza, avevamo applicato la funzione self_pow() a ogni numero nell’elenco dei numeri. Nella sintassi per la funzione map(), possiamo passare la funzione self_pow e list nums come argomenti.

Nota: specificare solo il nome della funzione e non una chiamata di funzione. Usa self_pow e non self_pow().

La funzione map() restituisce un oggetto mappa.

print(map(self_pow,nums))

<map object at 0x7f7d315c14d0>

Possiamo quindi eseguire il cast dell’oggetto mappa in una lista usando la funzione list(), come mostrato di seguito.

nums_pow = list(map(self_pow,nums))
print(nums_pow)

Ecco l’output in cui ogni num in nums è mappato su numnum nell’elenco nums_pow.

Output
[4, 256, 27, 823543]

#2. Considera la seguente funzione inch_to_cm() che converte i pollici in centimetri. 1 pollice = 2,54 cm.

def inch_to_cm(inch):
  return inch*2.54

Per convertire i valori in pollici nell’elenco pollici in centimetri, puoi utilizzare la funzione map() come mostrato nella cella del codice qui sotto.

inches = [5.54,3.4,1,25,8.2]
cms = list(map(inch_to_cm,inches))
print(cms)

La lista cms contiene i valori in pollici espressi in centimetri.

Output
[14.0716, 8.636, 2.54, 63.5, 20.828]

Come utilizzare la funzione map() con le funzioni integrate

In questa sezione impareremo come usare map() con le funzioni integrate in Python.

# 1. L’elenco stringhe è un elenco di linguaggi di programmazione. Vorresti creare un nuovo elenco strings_upper che contenga le stringhe del linguaggio di programmazione in maiuscolo.

strings = ['JavaScript','Rust','Python','Go']

Il metodo di stringa integrato .upper() agisce su una stringa e restituisce una copia formattata in maiuscolo.

strings_upper = list(map(str.upper,strings)) 
print(strings_upper)

L’elenco strings_upper include stringhe nell’elenco stringhe formattate in maiuscolo.

Output
['JAVASCRIPT', 'RUST', 'PYTHON', 'GO']

#2. La funzione len() incorporata in Python accetta una sequenza come argomento e ne restituisce la lunghezza. Per trovare la lunghezza di ciascuna delle stringhe nell’elenco delle stringhe, possiamo utilizzare la funzione map() e applicare la funzione di lunghezza su ciascuna stringa, come mostrato di seguito.

strings_len = list(map(len,strings))
print(strings_len)
Output
[10, 4, 6, 2]

#3. Puoi usare la funzione map() con altre raccolte come le tuple.

L’esempio seguente contiene una tupla contenente informazioni sul numero di camere da letto, l’area e la città in cui si trova una casa.

In Python, la funzione type() restituisce il tipo di dati di qualsiasi oggetto Python. Per ottenere il tipo di dati di tutti gli elementi in questa tupla, puoi usare la funzione map() per chiamare la funzione di tipo su ogni elemento della tupla.

house = (2,758.5,'Bangalore')
house_elt_type = tuple(map(type,house))
print(house_elt_type)

Abbiamo lanciato l’oggetto mappa in una tupla. Puoi anche eseguire il cast in un elenco o in qualsiasi altra raccolta.

Nell’output seguente, vediamo che i tipi di dati di 2, 758.5 ​​e Bangalore sono stati dedotti rispettivamente come ‘int’, ‘float’ e ‘str’.

Output
(<class 'int'>, <class 'float'>, <class 'str'>)

#4. In Python, puoi importare moduli integrati e utilizzare le funzioni definite nei moduli.

Per calcolare la radice quadrata di ogni numero nell’elenco dei numeri, puoi usare la funzione radice quadrata sqrt dal modulo matematico.

import math
nums = [30,90,34,45,97]
nums_sqrt = list(map(math.sqrt,nums))
print(nums_sqrt)
Output
[5.477225575051661, 9.486832980505138, 5.830951894845301, 6.708203932499369, 9.848857801796104]

L’output di cui sopra è difficile da analizzare e seguire. Potresti voler arrotondare ogni valore di radice quadrata per dire due cifre decimali.

Come arrotondare un numero in virgola mobile in Python

Definiamo una funzione round_2() che prende un valore in virgola mobile e lo arrotonda a due cifre decimali.

def round_2(num):
  return round(num,2)

Ora puoi usare la funzione map() con la lista round_2 e nums_sqrt.

nums_sqrt_round = list(map(round_2,nums_sqrt))
print(nums_sqrt_round)
Output
[5.48, 9.49, 5.83, 6.71, 9.85]

È inoltre possibile utilizzare le funzioni nidificate map(), in cui la funzione della mappa interna viene utilizzata per calcolare l’elenco della radice quadrata nums_sqrt e la funzione della mappa esterna esegue l’operazione di arrotondamento.

nums_sqrt_round = list(map(round_2,list(map(math.sqrt,nums))))
print(nums_sqrt_round)
Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Le uscite sono identiche in entrambi gli approcci di cui sopra. Tuttavia, dovresti assicurarti che il codice sia leggibile e gestibile durante l’annidamento delle funzioni come mostrato sopra.

Come utilizzare la funzione map() con le funzioni Lambda

Nelle sezioni precedenti, hai imparato come usare la funzione Python map() con funzioni integrate e definite dall’utente. Ora imparerai come usare la funzione map() con le funzioni lambda, che sono anonime in Python.

A volte, avrai una funzione il cui corpo contiene solo una riga di codice e potresti dover utilizzare la funzione solo una volta e non farvi riferimento in altre parti del programma. È possibile definire tali funzioni come una funzione lambda in Python.

Nota: lambda args: expression è la sintassi generale per utilizzare una funzione lambda di Python.

# 1. Considera le seguenti stringhe di elenco. Supponiamo di voler ottenere un elenco strings_rev – contenente una copia invertita di ciascuna delle stringhe.

strings = ['JavaScript','Rust','Python','Go']

Possiamo invertire una stringa Python usando lo string slicing.

Nota: questa è una generalizzazione dell’espressione di slicing di stringhe str[start:stop:step].

– Senza i valori di inizio e fine, la sezione inizia all’inizio della stringa e si estende fino alla fine della stringa.
– I valori negativi di step danno fette a partire dalla fine della stringa.
– Pertanto, str[::-1] restituisce una copia invertita di str.

È possibile utilizzare questa funzione lambda: lambda x:x[::-1]All’interno della funzione mappa, come mostrato di seguito.

strings_rev = list(map(lambda x:x[::-1],strings))
print(strings_rev)

Come con altri esempi, eseguiamo il cast dell’oggetto mappa in un elenco. Nell’output, vediamo che ciascuna delle stringhe nelle stringhe dell’elenco è stata invertita.

Output
['tpircSavaJ', 'tsuR', 'nohtyP', 'oG']

#2. Nella sezione precedente, abbiamo calcolato la radice quadrata di ogni numero nell’elenco dei numeri e quindi arrotondato ogni valore di radice quadrata a due cifre decimali.

Abbiamo usato la funzione round_2() per farlo. Riscriviamo la funzione round_2() come una funzione lambda e la usiamo con la funzione map() descritta di seguito.

nums_sqrt_round_l =list(map(lambda num:round(num,2),nums_sqrt))
print(nums_sqrt_round_l)

Come si vede di seguito, l’output è identico a quello che abbiamo ottenuto usando la funzione round_2().

Output
[5.48, 9.49, 5.83, 6.71, 9.85]

Come utilizzare la funzione map() con più iterabili

Negli esempi che abbiamo visto, abbiamo applicato una funzione a tutti gli elementi di esattamente un iterabile.

A volte, potremmo avere funzioni che accettano due o più argomenti. In questo caso, ogni argomento viene archiviato in un elenco o in una raccolta simile.

Possiamo anche usare la funzione Python map() con liste multiple.

# 1. Si consideri la seguente funzione area() che accetta la lunghezza e la larghezza come input e restituisce l’area, lunghezza*ampiezza.

def area(length,breadth):
  return length*breadth

La lunghezza e la larghezza di rettangoli diversi sono memorizzate in due elenchi separati, rispettivamente lunghezze e larghezze.

lengths = [4,8,10,18]
breadths = [9,4,6,11]

Possiamo usare la funzione map() per applicare la funzione area alle liste di cui sopra passando sia le liste lunghezze che larghezze.

areas = list(map(area,lengths,breadths))
print(areas)

Poiché l’area della funzione accetta due argomenti, i valori di lunghezza e ampiezza vengono utilizzati rispettivamente dagli elenchi lunghezze larghezze.

Output
[36, 32, 60, 198]

#2. Il modulo matematico Python ha la funzione log che ci aiuta a calcolare il logaritmo di un numero su qualsiasi base.

Nota: log(x, base) restituisce il valore di log x alla base specificata dal valore base, log base x. Se la base non è specificata, il valore di base predefinito è e (log calcola il logaritmo naturale).

In questo esempio:

  • L’elenco x corrisponde ai valori per i quali si desidera calcolare il logaritmo.
  • L’elenco di base contiene tutti i valori di base da utilizzare nel calcolo del logaritmo.
x = [2,6,12,10]
base = [2,3,2,5]

Possiamo usare la funzione Python map() con math.log, le liste, xe base per ottenere la nuova lista log_x, come segue.

log_x = list(map(math.log,x,base))
print(log_x)

Ecco l’output.

Output
[1.0, 1.6309297535714573, 3.5849625007211565, 1.4306765580733933]

Conclusione

Ecco un riassunto di ciò che hai imparato in questo tutorial:

  • La funzione Python map() accetta almeno due argomenti: una funzione e un iterable, con la sintassi map(function, iterable(s)).
  • La funzione può essere qualsiasi chiamabile Python valido.
  • Quando la funzione accetta k argomenti, usa la funzione map() con la funzione e ciascuno dei k argomenti in un iterabile.

Quindi, impara a lavorare con i set in Python.