Modificare gli elementi di una lista
Gli elementi presenti all’interno di una lista potranno essere modificati dinamicamente; nel prossimo capitolo analizzeremo un costrutto sintattico simile alle liste, le tuple che abbiamo analizzato parzialmente in precedenza; queste ultime funzionano in modo simile alle liste ma hanno la caratteristica di essere immutabili, mentre per quanto riguarda le liste si avrà una maggiore libertà nella manipolazione degli elementi assegnati.
Per modificare un elemento di una lista è necessario fare ricorso all’operatore "=", cioè lo stesso che consente di assegnare dei valori alle variabili; si ipotizzi per esempio di voler modificare un elemento, il "6", presente nella seguente lista:
>>> nome_lista = [10, 9, 8, 6]
In questo caso, dato che l’elemento che vogliamo modificare è associato all’indice "3", dovremo operare in questo modo:
>>> nome_lista[3] = 7
Fatto ciò dovremmo ottenere una nuova lista formata dai seguenti elementi:
>>> nome_lista
[10, 9, 8, 7]
In sostanza la sintassi per la sostituzione di un elemento in lista prevede l’assegnazione dell’elemento sostitutivo al numero indice della lista da modificare tramite l’operatore "=". E’ chiaramente possibile anche l’operazione che permette di modificare più elementi di una lista alla volta, per cui un’istruzione come la seguente applicata alla lista ottenuta in precendenza:
>>> nome_lista[1:4] = [11, 12, 13]
Determinerà la sostituzione degli elementi che vanno dal secondo fino al quarto tra quelli presenti il lista e la lista risultante sarà la seguente:
>>> nome_lista
[10, 11, 12, 13]
Aggiungere elementi ad una lista
Il metodo append() consentirà di inserire un nuovo elemento in lista accodandolo a quelli già presenti; data l’ultima lista ottenuta tramite il precedente esempio, un’istruzione come la seguente:
>>> nome_lista.append.(14)
Porterebbe alla generazione della lista proposta di seguito:
>>> nome_lista
[10, 11, 12, 13, 14]
Nel caso in cui si vogliano invece aggiungere più elementi ad una lista con un’unica istruzione, sarà possibile utilizzare un altro metodo, extend():
>>> nome_lista.extend([15, 16, 17, 18])
che nel caso specifico dell’esempio mostrato permetterà di ottenere la lista:.
>>> nome_lista
[10, 11, 12, 13, 14, 15, 16, 17, 18]
Un altro caso interessante riguarda la concatenazione delle liste, operazione per la quale si farà ricorso all’apposito operatore di concatenazione simboleggiato com’è noto dal segno "+":
>>> nome_lista
[10, 11, 12, 13, 14, 15, 16, 17, 18]
>>> nome_lista + [19, 20, 21]
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
L’operatore "*" consentirà invece di definire liste formate da più elementi identici tra loro ripetuti un numero di volte pari al valore passato come moltiplicatore nell’istruzione:
>>> [Homer] * 4
['Homer', 'Homer', 'Homer', 'Homer']
E’ infine da citare il metodo denominato insert() con il quale si potrà aggiungere un elemento ad una lista nella posizione desiderata:
>>> nome_lista = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
>>> nome_lista.insert(0,9)
>>> nome_lista
[9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
In sostanza si tratta di un metodo che accetta due argomenti, il primo è il numero indice (nel nostro caso "0") che dovrà essere assegnato al nuovo componente della lista, il secondo ("9" nell’esempio) è l’elemento destinato all’inserimento nella lista.
Verificare la presenza di elementi nelle liste
Uno sviluppatore potrebbe voler verificare che un determinato elemento sia effettivamente presente all’interno di una lista; per questo scopo è disponibile la parola chiave in che in sostanza effettuan un confronto di tipo booleano tra il valore passato come argomento e gli elementi presenti in lista. Nel caso in cui il parametro dovesse trovare corrispondenza con un elemento in lista la verifica restituirà TRUE, altrimenti restituirà FALSE:
>>> nome_lista = [10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
>>> 14 in nome_lista
True # viene restituito "True" perché l'elemento è in lista
>>> 22 in nome_lista
False # viene restituito "False" perché l'elemento non è in lista
Cancellare elementi da una lista
Così come è possibile inserire nuovi elementi in una lista è anche possibile cancellarli utilizzando, in questo caso la parola chiave del; volendo rimuovere un elemento da una lista sarà necessario passare a del l’indice associato ad esso, come nell’esempio seguente dove ad essere eliminato sarà l’elemento con indice "5" (cioè quello con valore "15"):
# Cancellazione di un singolo elemento da una lista
>>> nome_lista
[10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21]
>>> del nome_lista[5]
>>> nome_lista
[10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21]
Si noti come l’interprete di Python interverrà per riordinare gli indici della lista, motivo per il quale l’indice utilizzato come identificatore per la cancellazione non andrà perduto ma verrà riassegnato:
>>> nome_lista
[10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21]
>>> nome_lista[5]
16
Nel caso in cui si desideri cancellare simultaneamente più elementi sarà necessario specificare l’intervallo all’interno del quale sono compresi, ad esempio:
# Cancellazione dei valori compresi in un intervallo
>>> nome_lista
[10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21]
>>> del nome_lista[2:6]
>>> nome_lista
[10, 11, 17, 18, 19, 20, 21]
Se si desidera cancellare un elemento specifico senza richiamarlo attraverso il suo indice lo si potrà fare tramite il metodo remove() a cui passare il nome dell’elemento da eliminare:
# Rimozione di un elemento specifico da una lista
>>> nome_lista
[10, 11, 17, 18, 19, 20, 21]
>>> nome_lista.remove(17)
>>> nome_lista
[10, 11, 18, 19, 20, 21]
Per ripulire interamente una lista dal suo contenuto è invece disponibile il metodo clear() a cui passare come argomento il nome della lista da "svuotare":
# Rimozione simultanea di tutti gli elementi di una lista
>>> nome_lista
[10, 11, 18, 19, 20, 21]
>>> nome_lista.clear()
>>> nome_lista
[]>
Anche dopo aver perso tutti i suoi elementi la lista continuerà ad esistere come lista vuota, per eliminarla del tutto si dovrà fare ricorso nuovamente ad un’istruzione basata su del:
# Cancellazione definitiva di una lista
>>> del nome_lista
# la chiamata alla lista produrrà un errore
# in quanto la lista non esiste più
>>> nome_lista
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'nome_lista' is not defined