back to top

Funzioni per liste e tuple

In Python le funzioni native per le liste e le tuple sono le medesime, presentano gli stessi nomi e la stessa sintassi e prevedono gli stessi valori di ritorno; vale quindi la pena analizzarle insieme per evitare inutili ripetizioni. Chiaramente faremo riferimento soltanto ai costrutti più comunemente utilizzati.

Funzioni comuni di liste e tuple

Un primo esempio sono le semplici funzioni all() e any(). Passando come parametro alla prima una lista, la funzione restituirà TRUE se tutti gli elementi sono TRUE oppure se la lista è vuota, cioè priva di elementi; any() invece restituirà TRUE se un qualsiasi elemento di una lista è TRUE o se la lista non è vuota. Stesso discorso per le tuple. Si tratta quindi di funzioni utili per verificare il contenuto di liste e tuple.

enumerate() restituisce un oggetto che contiene coppie composte da indici e valori di tutti gli elementi che compongono una lista o una tupla:

# Uso della funzione enumerate()
>>> a_lista = ['a','b','c']
>>> a_tuple = ('x','y','z')
# coppie indice/valore della lista
>>> [(i, j) for i, j in enumerate(a_lista)]
[(0, 'a'), (1, 'b'), (2, 'c')]
# coppie indice/valore della tupla
>>> [(i, j) for i, j in enumerate(a_tuple)]
[(0, 'x'), (1, 'y'), (2, 'z')]

Nell’esempio sono state create una lista e una tupla, esse sono state poi passate come argomento a enumerate() in modo da ottenere un oggetto per ciascuna che potesse essere iterato con il ciclo for al fine di ottenere in output tutte le coppie di indici e valori degli elementi di entrambe.

len() è una funzione che restituisce in output la lunghezza di una lista o di una tupla, per "lunghezza" si intende in pratica il numero di elementi presenti in una lista o in una tupla:

# Contare gli elementi di una lista o di una tupla
>>> b_lista = ['a','b','c','e','f']
>>> len(b_lista)
5
>>> b_tuple = (1,2,3)
>>> len(b_tuple)
3

max() e min() sono invece due funzioni utili per ottenere come valore di ritorno rispettivamente il più grande e il più piccolo valore di una lista o di una tupla.

# Ottenere il più grande e il più piccolo valore di una lista o di una tupla
>>> max(b_lista)
'f'
>>> min(b_lista)
'a'
>>> max(b_tuple)
3
>>> min(b_tuple)
1

Nel caso di valori numerici, l’esecutore procede effettuando dei semplici confronti basati sul valore delle cifre associate agli elementi, nel caso di stringhe queste vengono considerate in ordine crescente, motivo per il quale la prima letterà dell’alfabeto risulta essere inferiore rispetto alla seconda, la seconda alla terza e così via.

Liste o tuple composte da valori numerici e stringhe vengono considerate come formate da tipi di dato non ordinabili e, quando passate come argomento a max() e min(), l’esecutore produrrà un errore. Nel caso in cui invece dei valori numerici vengano inseriti utilizzando la sintassi delle stringhe, cioè tra apici, l’interprete di Python sarà in grado di individuarne il valore e di estrarre gli elementi con maggiore e minore valore, riportando comunque il tipo di dato corretto:

# Ottenere il più grande e il più piccolo valore di una lista o di una tupla
# indipendentemente dal tipo di dato utilizzato
>>> c_lista = ['1','4','3','7','5','2']
>>> max(c_lista)
'7'
>>> min(c_lista)
'1'
>>> c_tuple = (1,4,3,7,5,2)
>>> max(c_tuple)
7
>>> min(c_tuple)
1

sorted() permette di riordinare gli elementi di una lista o di una tupla. Nel caso si tratti di elementi alfanumerici viene utilizzato un criterio alfabetico come avverrebbe in un qualsiasi vocabolario, i valori numerici verranno invece riposizionati a partire dall’elemento di minor valore fino al maggiore utilizzando quindi l’ordine crescente.

# Riordinare gli elementi di una lista o di una tupla
>>> d_lista = ['a','c','b','f','e','d']
>>> sorted(d_lista)
['a', 'b', 'c', 'd', 'e', 'f']
>>> d_tuple = (4,2,12,6,10,8)
>>> sorted(d_tuple)
[2, 4, 6, 8, 10, 12]

La funzione sum() viene utilizzata per sommare tutti i valori degli elementi numerici presenti in una lista o in una tupla, tali elementi non potranno essere specificati adottando la sintassi delle stringhe (tra apici) o verrà generato un errore in output ("unsupported operand type(s)..").

# Sommare gli elementi di una lista o di una tupla
>>> f_tuple = (100,200,300)
>>> sum(f_tuple)
600
>>> f_lista = [299,399,499]
>>> sum(f_lista)
1197
>>> g_lista = ['11','11','11']
>>> sum(g_lista)
Traceback (most recent call last):
  File "<pyshell#44>", line 1, in <module>
    sum(g_lista)
TypeError: unsupported operand type(s) for +: 'int' and 'str'
>>> g_tuple = ('22','22','22')
>>> sum(g_tuple)
Traceback (most recent call last):
  File "<pyshell#47>", line 1, in <module>
    sum(g_tuple)
TypeError: unsupported operand type(s) for +: 'int' and 'str'

list() e tuple()

list() è una funzione in grado di convertire un oggetto iterabile, ad esempio una tupla, in una lista; a tal proposito si analizzi il seguente esempio:

# Convertire una tupla in una lista
>>> h_tuple = ('uno','due','tre')
>>> h_lista = list(h_tuple)
>>> h_lista[1] = 'quattro'
>>> h_lista
['uno', 'quattro', 'tre']

Nel codice proposto viene definita una tupla i cui elementi sono per definizione immutabili, convertendo la tupla in una lista tramite list() è stato però possibile modificare il valore di un elemento. Se invece effettuassimo l’operazione inversa, cioè convertire la lista in una tupla utilizzando l’apposita funzione tuple(), gli elementi tornerebbero ad essere immutabili:

# Convertire una lista in una tupla
>>> i_tuple = tuple(h_lista)
>>> i_tuple[1] = 'cinque'
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    i_tuple[1] = 'cinque'
TypeError: 'tuple' object does not support item assignment
>>>
Pubblicità
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.
Articolo precedente
Articolo successivo