Liste e Funzioni in Python
Un ultimo argomento che ci rimane da affrontare per completare lo studio delle liste in linguaggio Python è quello della relazione tra liste e funzioni. In particolare, vedremo come passare una lista come parametro di una funzione e come le funzioni possono modificare una lista passata come parametro.
Inoltre vedremo alcune funzioni built-in per le liste che ci permettono di risolvere alcuni problemi comuni, come la somma di tutti gli elementi di una lista numerica e la ricerca del valore minimo e massimo di una lista.
Passaggio di una lista come parametro
In questa lezione introdurremo alcuni concetti riguardanti le funzioni che poi approfondiremo in lezioni successive. In particolare, vedremo come passare una lista come parametro di una funzione.
Una lista in Python non è un tipo di dato primitivo come ad esempio un intero e soprattutto si tratta di un tipo mutabile, ossia modificabile. Questo significa che una lista può essere modificata durante l'esecuzione del programma.
Ora, quando dichiariamo una variabile di tipo lista in questo modo:
x = [1, 2, 3]
Python alloca un certo spazio di memoria per la lista e memorizza in esso i valori che compongono la lista. La variabile x
, in realtà, non contiene i valori della lista, ma un riferimento alla lista stessa.
Questo è un dettaglio fondamentale, infatti se proviamo ad eseguire un'assegnazione come questa:
y = x
Si potrebbe pensare che Python crei una copia della lista e la assegna alla variabile y
. In realtà, Python non crea una copia, ma semplicemente crea un nuovo riferimento alla lista. Questo significa che se modifichiamo la lista x
anche la lista y
verrà modificata.
y[2] = 10
print(x)
print(y)
Il risultato sarà:
[1, 2, 10]
[1, 2, 10]
Questo comportamento è molto importante. Infatti, se creiamo una funzione e passiamo una lista come parametro, non stiamo passando una copia ma un riferimento alla lista stessa. In altre parole, una lista viene passata per riferimento. La conseguenza è che una funzione può modificare una lista passata come parametro.
Prendiamo un esempio:
def aggiungi_elemento(lista, elemento):
lista.append(elemento)
x = [1, 2, 3]
aggiungi_elemento(x, 4)
print(x)
Il risultato sarà:
[1, 2, 3, 4]
Come possiamo vedere, la funzione aggiungi_elemento
ha modificato la lista x
passata come parametro.
Nelle prossime lezioni vedremo come modificare questo comportamento. Per il momento bisogna tenere a mente che:
Una lista viene passata per riferimento ad una funzione
Se una lista viene passata come parametro ad una funzione, essa verrà sempre passata per riferimento. Pertanto la funzione può accedere e modificare la funzione al proprio interno.
Funzioni built-in per le liste
Nel linguaggio Python esistono delle funzioni built-in per le liste. In realtà tali funzioni lavorano su qualsiasi iterabile, ma per il momento ci concentriamo sul caso delle liste.
La prima funzione che vedremo è sum
. Questa funzione restituisce la somma di tutti gli elementi di una lista purché quest'ultima contenga valori numerici. Ad esempio:
x = [1, 2, 3, 4, 5]
print(sum(x))
Il risultato sarà:
15
La funzione sum
accetta anche un parametro opzionale start
che indica il valore iniziale della somma. Ad esempio:
x = [1, 2, 3, 4, 5]
print(sum(x, start=10))
Il risultato sarà:
25
Funzione sum
per le liste
La funzione sum
restituisce la somma di tutti gli elementi di una lista che contiene valori numerici. La funzione accetta un parametro opzionale start
che indica il valore iniziale della somma.
La sintassi è la seguente:
sum(iterabile, start=0)
Altre due funzioni built-in per le liste sono min
e max
. Queste funzioni restituiscono rispettivamente il valore minimo e il valore massimo di una lista. Ad esempio:
x = [1, 2, 3, 4, 5]
print(min(x))
print(max(x))
Il risultato sarà:
1
5
Queste due funzioni possono essere applicate solo su liste che contengono elementi per cui siano definiti gli operatori di confronto <
e >
. Ad esempio possiamo applicarle su liste che contengono stringhe:
x = ["pippo", "pluto", "paperino"]
print(min(x))
print(max(x))
Il risultato sarà:
paperino
pluto
Ovviamente, non possono essere applicate su liste che contengono elementi di tipo diverso:
x = [1, 2, 3, "pippo"]
print(min(x))
In tal caso verrà sollevata un'eccezione:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'str' and 'int'
Funzioni min
e max
per le liste
Le funzioni min
e max
restituiscono rispettivamente il valore minimo e il valore massimo di una lista. Queste funzioni possono essere applicate solo su liste che contengono elementi per cui siano definiti gli operatori di confronto <
e >
. La sintassi è la seguente:
min(iterabile)
max(iterabile)
Esempi
Avendo visto qual è il comportamento del passaggio di una lista come parametro di una funzione, vediamo alcuni esempi.
Media di una lista di numeri
Supponiamo di voler realizzare una funzione che calcoli la media di una lista di numeri in virgola mobile. La funzione avrà come parametro una lista di numeri e restituirà la media.
def media(lista):
somma = 0.0
for elemento in lista:
somma += elemento
return somma / len(lista)
Possiamo testare la funzione con una lista di numeri:
x = [3.2, 4.5, 6.7, 8.9]
print(media(x))
Il risultato sarà:
5.825
Deviazione standard di una lista di numeri
Supponiamo di voler realizzare una funzione che calcoli la deviazione standard di una lista di numeri in virgola mobile. La funzione avrà come parametro una lista di numeri e restituirà la deviazione standard.
def deviazione_standard(lista):
m = media(lista)
somma = 0.0
for elemento in lista:
somma += (elemento - m) ** 2
return (somma / len(lista)) ** 0.5
Possiamo testare la funzione con una lista di numeri:
x = [3.2, 4.5, 6.7, 8.9]
print(deviazione_standard(x))
Il risultato sarà:
2.1718367802392518
In Sintesi
In questa lezione abbiamo analizzato la relazione tra liste e funzioni in linguaggio Python.
Abbiamo visto che una lista passata come parametro ad una funzione viene sempre passata per riferimento. Pertanto la funzione può accedere e modificare la lista al proprio interno.
Abbiamo visto anche che esistono delle funzioni built-in per le liste che possono essere utili per risolvere alcuni problemi: sum
, min
, max
.
Infine abbiamo visto alcuni esempi di funzioni che utilizzano liste come parametri.
Nella prossima lezione combineremo liste e funzioni per implementare delle interessanti applicazioni delle liste in linguaggio Python.