Ricerca di elementi in una lista in Python
Un'altra operazione fondamentale che le liste supportano in linguaggio Python è la ricerca di elementi.
Di base, ricercare un elemento in una lista consiste nel verificare se un elemento è presente o meno all'interno della lista. Dato che una lista può contenere ripetizioni, di solito la ricerca si ferma al primo elemento trovato.
In questa lezione ci concentreremo sulle due principali tecniche di ricerca fornite dal linguaggio Python: l'operatore in
e il metodo index
.
Ricerca di elementi in una lista in Python
Nella lezioni precedenti abbiamo visto come creare, modificare e eliminare elementi da una lista.
Adesso ci concentreremo sull'operazione di ricerca di elementi in una lista. In sostanza, la ricerca di un elemento all'interno di un contenitore, quale è una lista, consiste nello specificare un elemento e verificare la sua presenza.
Ora, specificare un elemento può significare molte cose. Nel caso di tipi di dato semplici, come possono essere tipi numerici, int
e float
, oppure stringhe, str
, si può specificare il valore da ricercare. Pertanto la ricerca di un elemento in una lista consiste nel verificare se tale valore è presente o meno.
Ad esempio, in una lista che contiene numeri interi, basta specificare il valore del numero intero da ricercare.
Quando, invece, una lista contiene tipi di dato complessi, come vedremo nelle future lezioni, non è sufficiente specificare un valore. In questa lezione ci concentreremo su tipi semplici. In futuro vedremo come ricercare elementi in liste di liste, liste di dizionari, liste di tuple, ecc.
Il risultato della ricerca di un elemento in una lista può essere di due tipi:
- Un valore booleano che indica se l'elemento è presente o meno;
- L'indice dell'elemento nella lista.
Ricapitolando:
Operazione di ricerca di un elemento in una lista
L'operazione di ricerca di un elemento in una lista consiste nel verificare se un elemento è presente o meno nella lista. Il risultato della ricerca può essere un booleano oppure l'indice dell'elemento nella lista.
Peculiarità delle liste
Prima di addentrarci nei dettagli della ricerca, bisogna tenere a mente alcuni dettagli delle liste, che altre strutture dati non hanno.
In primo luogo una lista può contenere duplicati. Questo significa che un elemento può essere presente più volte nella lista. Inoltre, una lista è ordinata. Per tal motivo, quando si cerca un elemento si possono verificare tre casi:
- L'elemento non è presente;
- L'elemento è presente e vi è una sola occorrenza;
- L'elemento è presente e vi sono più occorrenze.
In sostanza, l'operazione di ricerca parte dall'elemento con indice inferiore e prosegue fino all'elemento con indice superiore. In questo modo, se l'elemento è presente, viene restituito l'indice del primo elemento trovato.
Avendo chiarito questi concetti possiamo passare alle tecniche pratiche di ricerca.
Verificare la presenza di un elemento in una lista con l'operatore in
La prima tecnica di ricerca che vedremo sfrutta l'operatore incorporato del linguaggio Python in
. Questo operatore permette di verificare se un elemento è presente o meno in un contenitore.
In particolare l'operatore in
restituisce un valore booleano, True
se l'elemento è presente, False
altrimenti.
Ad esempio:
>>> lista = [1, 2, 3, 4, 5]
>>> 3 in lista
True
>>> 6 in lista
False
Un altro esempio di verifica della presenza di una stringa in una lista:
>>> lista = ["ciao", "come", "va"]
>>> "ciao" in lista
True
>>> "buongiorno" in lista
False
L'operatore in
può essere utilizzato anche in combinazione con un'istruzione if
:
lista = [1, 2, 3, 4, 5]
if 3 in lista:
print("L'elemento è presente")
else:
print("L'elemento non è presente")
Operatore in
per le Liste
L'operatore in
permette di verificare se un elemento è presente o meno in una lista. Il risultato è un valore booleano.
Ottenere l'indice di un elemento: index
L'operatore in
visto sopra controlla esclusivamente se un elemento è presente o meno. Non ci dice nulla sulla sua posizione. Per questo scopo esiste il metodo index
.
Il metodo index
permette di ottenere l'indice di un elemento in una lista. Possiamo vedere questo metodo come l'inverso dell'operazione di indicizzazione.
Vediamo con un esempio:
>>> lista = [1, 2, 3, 4, 5]
>>> lista[2]
3
>>> lista.index(3)
2
In questo esempio abbiamo ottenuto l'indice dell'elemento 3
nella lista. Se l'elemento non è presente nella lista, viene sollevata un'eccezione ValueError
:
>>> lista = [1, 2, 3, 4, 5]
>>> lista.index(6)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 6 is not in list
Se vi sono più elementi uguali nella lista, viene restituito l'indice del primo elemento:
>>> lista = [1, 2, 3, 4, 5, 3]
>>> lista.index(3)
2
Metodo index
per le Liste
Il metodo index
permette di ottenere l'indice di un elemento in una lista. La sintassi è la seguente:
lista.index(elemento)
Se vi sono più occorrenze dell'elemento nella lista, viene restituito l'indice del primo elemento.
Dal momento che il metodo index
restituisce un errore in caso di assenza dell'elemento, per poter gestire questo caso bisogna usare un blocco try
/except
. Tuttavia, vedremo la gestione delle eccezioni nelle prossime lezioni. Per il momento vediamo un semplice esempio:
lista = [1, 2, 3, 4, 5]
try:
indice = lista.index(6)
except ValueError:
print("L'elemento non è presente nella lista")
In questo esempio, in caso di assenza dell'elemento nella lista, viene stampato un messaggio di errore. Questo perché il controllo di flusso passa al blocco except
che cattura l'errore. Vedremo i dettagli sulla gestione degli errori e delle eccezioni nelle future lezioni.
In Sintesi
In questa lezione abbiamo visto come cercare un elemento in una lista. In particolare abbiamo visto due tecniche:
- L'operatore
in
che restituisce un valore booleano; - Il metodo
index
che restituisce l'indice del primo elemento trovato.