Elenchi
Ultimo aggiornamento il 2025-11-06 | Modifica questa pagina
Panoramica
Domande
- Come si possono memorizzare più valori?
Obiettivi
- Spiegare perché i programmi hanno bisogno di collezioni di valori.
- Scrivere programmi che creino elenchi semplici, li indicizzino, li suddividano (slice) e li modifichino tramite assegnazioni o chiamate a metodi.
Un elenco memorizza molti valori in un’unica struttura.
- Fare calcoli con un centinaio di variabili chiamate
pressure_001,pressure_002, ecc. sarebbe almeno altrettanto lento che farli a mano. - Utilizzare un elenco per memorizzare molti valori insieme.
- Racchiuso tra parentesi quadre
[...]. - Valori separati da virgole
,.
- Racchiuso tra parentesi quadre
- Usare
lenper scoprire quanti valori ci sono in un elenco.
PYTHON
pressures = [0.273, 0.275, 0.277, 0.275, 0.276]
print('pressures:', pressures)
print('length:', len(pressures))
OUTPUT
pressures: [0.273, 0.275, 0.277, 0.275, 0.276]
length: 5
Usare l’indice di un elemento per recuperarlo da un elenco.
- Come le stringhe.
PYTHON
print('zeroth item of pressures:', pressures[0])
print('fourth item of pressures:', pressures[4])
OUTPUT
zeroth item of pressures: 0.273
fourth item of pressures: 0.276
I valori di un elenco possono essere sostituiti tramite assegnazione
- Utilizzare un’espressione di indice a sinistra dell’assegnazione per sostituire un valore.
OUTPUT
pressures is now: [0.265, 0.275, 0.277, 0.275, 0.276]
L’aggiunta di elementi a un elenco ne aumenta la lunghezza
- Usare
list_name.appendper aggiungere elementi alla fine di un elenco.
PYTHON
primes = [2, 3, 5]
print('primes is initially:', primes)
primes.append(7)
print('primes has become:', primes)
OUTPUT
primes is initially: [2, 3, 5]
primes has become: [2, 3, 5, 7]
-
appendè un metodo delle liste.- È simile a una funzione, ma associato a un particolare oggetto.
- Usare
object_name.method_nameper chiamare i metodi.- Questo stile ricorda volutamente il modo in cui ci si riferisce agli elementi in una libreria.
- Nel corso della trattazione incontreremo altri metodi delle liste.
- Utilizzare
help(list)per un’anteprima.
- Utilizzare
-
extendè simile aappend, ma consente di combinare due elenchi. Ad esempio:
PYTHON
teen_primes = [11, 13, 17, 19]
middle_aged_primes = [37, 41, 43, 47]
print('primes is currently:', primes)
primes.extend(teen_primes)
print('primes has now become:', primes)
primes.append(middle_aged_primes)
print('primes has finally become:', primes)
OUTPUT
primes is currently: [2, 3, 5, 7]
primes has now become: [2, 3, 5, 7, 11, 13, 17, 19]
primes has finally become: [2, 3, 5, 7, 11, 13, 17, 19, [37, 41, 43, 47]]
Si noti che mentre extend mantiene la struttura “piatta”
dell’elenco, l, aggiungere un elenco a un altro fa sì che l’ultimo
elemento di primes ssia a sua volta un elenco, non un
intero. Gli elenchi possono contenere valori di qualsiasi tipo; sono
quindi possibili elenchi di elenchi.
Usare del per rimuovere completamente un elemento da
una lista.
- Si usa
del list_name[index]per rimuovere un elemento da una lista (nell’esempio, 9 non è un numero primo) e quindi accorciarlo. -
delnon è una funzione o un metodo, ma un’istruzione del linguaggio.
PYTHON
primes = [2, 3, 5, 7, 9]
print('primes before removing last item:', primes)
del primes[4]
print('primes after removing last item:', primes)
OUTPUT
primes before removing last item: [2, 3, 5, 7, 9]
primes after removing last item: [2, 3, 5, 7]
La lista vuota non contiene valori.
- Utilizzare
[]da solo per rappresentare una lista che non contiene valori.- “Lo zero della lista”
- Utile come punto di partenza per la raccolta di valori (che vedremo nel prossimo episodio).
Le liste possono contenere valori di tipi diversi.
- Una singola lista può contenere numeri, stringhe e qualsiasi altra cosa.
Le stringhe di caratteri possono essere indicizzate come le liste.
- Ottenere singoli caratteri da una stringa di caratteri utilizzando gli indici tra parentesi quadre.
PYTHON
element = 'carbon'
print('zeroth character:', element[0])
print('third character:', element[3])
OUTPUT
zeroth character: c
third character: b
Le stringhe di caratteri sono immutabili.
- Non è possibile modificare i caratteri di una stringa dopo la sua
creazione.
- Immutabile: non può essere modificato dopo la creazione.
- Al contrario, le liste sono mutabili: possono essere modificati sul posto.
- Python considera la stringa come un singolo valore con parti, non come un insieme di valori.
ERRORE
TypeError: 'str' object does not support item assignment
- Le liste e le stringhe di caratteri sono entrambi collezioni.
L’indicizzazione oltre la fine dell’insieme è un errore.
- Python segnala un
IndexErrorse si tenta di accedere a un valore che non esiste.- Questo è un tipo di [errore di runtime] (04-built-in.md).
- Non può essere rilevato durante l’analisi del codice perché l’indice potrebbe essere calcolato in base ai dati.
OUTPUT
IndexError: string index out of range
Riempire gli spazi vuoti
Quanto è grande una fetta?
Se start e stop sono entrambi numeri interi
non negativi, quanto è lunga la lista
values[start:stop]?
L’elenco values[start:stop] ha fino a
stop - start elementi. Per esempio,
values[1:4] ha i 3 elementi values[1],
values[2] e values[3]. Perché “fino a”? Come
abbiamo visto in [episodio 2] (02-variables.md), se stop è
maggiore della lunghezza totale della lista values,
otterremo comunque una lista, ma sarà più corta del previsto.
-
list('some string')converte una stringa in un elenco contenente tutti i suoi caratteri. -
joinrestituisce una stringa che è la concatenazione di ogni elemento di stringa dell’elenco e aggiunge il separatore tra ogni elemento della lista. Il risultato èx-y-z. Il separatore tra gli elementi è la stringa che fornisce questo metodo.
Lavorare con la fine
Cosa stampa il seguente programma?
- Come interpreta Python un indice negativo?
- Se un elenco o una stringa ha N elementi, qual è l’indice più negativo che può essere usato con sicurezza e quale posizione rappresenta tale indice?
- Se
valuesè una lista, cosa fadel values[-1]? - Come si possono visualizzare tutti gli elementi tranne l’ultimo
senza cambiare
values? (Suggerimento: è necessario combinare l’affettatura e l’indicizzazione negativa)
Il programma stampa m.
- Python interpreta un indice negativo come se partisse dalla fine
(invece che dall’inizio). L’ultimo elemento è
-1. - L’ultimo indice che può essere usato con sicurezza con un elenco di
N elementi è l’elemento
-N, che rappresenta il primo elemento. -
del values[-1]rimuove l’ultimo elemento della lista. values[:-1]
il programma stampa
-
strideè la dimensione della fetta. - La slice
1::2seleziona tutti gli elementi pari di un insieme: inizia con l’elemento1(che è il secondo elemento, dato che l’indicizzazione inizia da0), prosegue fino alla fine (dato che non viene datoend) e utilizza una dimensione di passo di2(cioè seleziona ogni secondo elemento).
OUTPUT
lithium
La prima istruzione stampa l’intera stringa, poiché la fetta va oltre la lunghezza totale della stringa. La seconda istruzione restituisce una stringa vuota, perché la fetta va “fuori dai limiti” della stringa.
Il programma A stampa
OUTPUT
letters is ['g', 'o', 'l', 'd'] and result is ['d', 'g', 'l', 'o']
Il programma B stampa
OUTPUT
letters is ['d', 'g', 'l', 'o'] and result is None
sorted(letters) restituisce una copia ordinata della
lista letters (l’elenco originale letters
rimane invariato), mentre letters.sort() ordina la lista
letters sul posto e non restituisce nulla.
Il programma A stampa
OUTPUT
new is ['D', 'o', 'l', 'd'] and old is ['D', 'o', 'l', 'd']
Il programma B stampa
OUTPUT
new is ['D', 'o', 'l', 'd'] and old is ['g', 'o', 'l', 'd']
new = old rende new un riferimento
all’elenco old; new e old puntano
allo stesso oggetto.
new = old[:] crea comunque un nuovo oggetto elenco
new contenente tutti gli elementi dell’elenco
old; new e old sono oggetti
diversi.
- Una lista memorizza molti valori in un’unica struttura.
- Utilizzare l’indice di un elemento per recuperarlo da una lista.
- I valori delle liste possono essere sostituiti assegnandoli.
- L’aggiunta di elementi a una lista lo allunga.
- Usare
delper rimuovere completamente gli elementi da una lista. - Una lista vuota non contiene valori.
- Le liste possono contenere valori di tipi diversi.
- Le stringhe di caratteri possono essere indicizzate come le liste.
- Le stringhe di caratteri sono immutabili.
- L’indicizzazione oltre la fine dell’insieme è un errore.