Corso Python Base - 14: Liste e Tuple

Video Corso Base di Python 3

14: Liste e Tuple

Come da titolo, in questa puntata introdurremo due nuovi tipi di dato in Python, le Liste ed i Tuple, che sono simili tra loro ma allo stesso tempo molto diversi. Capirete cosa intendo a breve.

N.B.In questa lezione, e in generale durante tutto il corso, mi riferisco al tipo di dato "Tuple" utilizzando la versione al maschile "i Tuple". È peró necessario precisare che in Italia ci si riferisce a questo tipo di dato al femminile col nome "Tupla", quindi si dice spesso "Le Tuple". La versione "i Tuple" da me utilizzata è quindi in verità più di matrice inglese. Tenete questo bene a mente, e proseguiamo con la lezione!

Le Liste sono un tipo di dato che contiene al suo interno un insieme di dati uguali o diversi tra di loro, ordinati in base ad un indice proprio della Lista.

Facciamo degli esempi, creiamo una variabile e assegnamole una lista:

elenco = [2, 5, "bacon", 3.14, "eggs"]

Così come una Stringa viene definita utilizzando apici o doppi apici, una Lista viene definita utilizzando una coppia di parentesi quadre. Gli elementi della Lista vengono quindi separati tra loro da delle virgole.

Per ottenere in output la lista completa di tutti gli elementi, anche qui, come visto per gli altri tipi di dato studiati fin'ora, ci basta semplicemente utilizzare il nome della variabile:

>>> elenco
[2, 5, 'bacon', 3.14, 'eggs']

Abbiamo detto che gli elementi sono ordinati in base ad un indice proprio di ciascuna Lista: ció significa che a ciascun elemento è associato un numero che ne rappresenta la posizione nell'elenco. Questo è fondamentale se vogliamo richiamare un elemento specifico, avremo infatti bisogno del suo indice corrispondente in modo da potervi accedere in maniera rapida e precisa.

Badate bene che il primo valore della Lista ha sempre come indice 0.

Quindi in questo caso 2 avrà indice 0, 5 avrà indice 1, 'bacon' avrà indice 2 e così via...

Volendo richiamare 'bacon' possiamo quindi fare:

elenco[2]
'bacon'

Volendo richiamare 'eggs':

elenco[4]
'eggs'

Se utilizziamo invece un indice negativo possiamo accedere agli elementi della lista dalla fine all'inizio, utilissimo ad esempio in caso di Liste particolarmente lunghe. L'ultimo elemento ha indice -1, il penultimo -2 e così via..

Per richiamare il 3.14 possiamo fare:

elenco[-2]
3.14

Un'altra caratteristica particolarmente interessante di questo sistema di indicizzazione è che avete la possibilità di accedere a una fetta di elementi da voi scelta, impostando un punto iniziale e un punto finale nell'indice.

Creiamo una nuova Lista... facciamo stavolta una Lista di soli numeri magari:

primi = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]
>>> primi[4:10]
[11, 13, 17, 19, 23, 29]

Quella che vedete è di fatto una nuova Lista creata a partire dalla Lista dei Numeri Primi, e volendo possiamo associare questa nuova Lista a una variabile:

fetta = primi[4:10]
>>> fetta
[11, 13, 17, 19, 23, 29]

Come forse alcuni di voi avranno notato, questo sistema di suddivisione a fette funziona un pó come la funzione range() vista nella lezione 8: l'ultimo elemento del Range non viene incluso nella nuova lista creata.

Possiamo impostare questo indice variabile anche in modo da farlo iniziare, o terminare, con l'inizio oppure la fine della lista, utilizzando due punti:

Per ottenere tutti i numeri dal 5o all'ultimo nella nostra lista possiamo fare:

>>> primi[4:]
[11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47]

Ho utilizzato il 4o perché partendo dall'indice 0, il 5o elemento nella Lista sará appunto quello con indice 4.

Parallelamente possiamo inoltre ottenere tutti gli elementi a partire dal primo fino ad una soglia da noi scelta in questo modo:

>>> primi[:5]
[2, 3, 5, 7, 11]

Tornando a fare un'analogia con range(), abbiamo visto che questa funzione è utilissima in combinazione con i cicli For.

ad esempio:

for numero in range(5):
    print(numero)
    
0
1
2
3
4

Allo stesso modo possiamo utilizzare i For Loop con le stringhe... ad esempio, considerando la lista di numeri primi utilizzata in precedenza:

for primo in primi:
    print(primo)

2
3
5
7
11
13
17
19
23
29
31
37
41
43
47

Possiamo quindi creare Liste a partire dalla funzione range() mediante la funzione di supporto list(), che converte elementi in Liste, ad esempio:

lista_numerica = list(range(99, 300))

richiamiamola:

>>> lista_numerica
[99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 
128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 
157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 
186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 
215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 
244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 
273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299]

Ed ecco a noi tutti i numeri tra 99 e 299, che possiamo ora utilizzare per effettuare i calcoli più disparati.

Questo tipo di dato è così flessibile che una Lista puó contenere al suo interno anche una o più liste:

>>> lista_multipla = ["spam", "eggs", 23, "bacon", [1, 2, 3, 4, 5], 3]

>>> lista_multipla
["spam", "eggs", 23, "bacon", [1, 2 ,3, 4, 5], 3]

Chiaramente per ottenere questa sottolista ci basta richiamarla con l'indice corrispondente all'interno della Lista contenitore:

>>> lista_multipla[-2]
[1, 2, 3, 4, 5]

Se vogliamo ottenere un elemento specifico della sottolista possiamo usare un doppio indice, ad esempio per ottenere l'ultimo elemento della sottolista:

>>> lista_multipla[-2][-1]
5

Utilizzando gli indici possiamo anche sostituire un elemento della Lista! ad esempio se volessimo sostituire la parola "bacon" con la parola "pancetta" potremo fare:

>>> lista_multipla[3] = "pancetta"
>>> lista_multipla 
['spam', 'eggs', 23, 'pancetta', [1, 2, 3, 4, 5], 3]

E per eliminare un elemento dalla Lista utilizziamo del. Volendo eliminare tutta la sottolista possiamo fare:

>>> del lista_multipla[-2] 
>>> lista_multipla
['spam', 'eggs', 23, 'pancetta', 3]

Vi invito a testare i limiti di queste istruzioni esercitandovi, perché si possono fare davvero tante cose utilissime.

Parliamo ora molto brevemente dei Tuple.

Come le liste si tratta di un gruppo, un insieme di elementi, definiti stavolta utilizzando una coppia di parentesi tonde, oppure senza alcuna parentesi:

>>> tupla = (2, 4, 9, 15, 23)

tupla
(2, 4, 9, 15, 23)
>>> tuple2 = 7,8,9

tuple2
(7, 8, 9)

Possiamo accedere agli elementi del Tuple utilizzando l'indice anche stavolta:

>>> tupla[0]
2

Ma la più grande differenza è che una volta creati, i Tuple NON si possono modificare, come invece accade per le Liste.

>>> del tupla[0]
TypeError: 'tuple' object doesn't support item deletion

Vorrete quindi utilizzare un Tuple invece di una Lista in quelle situazioni in cui è molto importante che un elenco sia immutabile, e tenete a mente anche che l'iterazione all'interno di un Tuple avviene molto più velocemente che in una Lista, e questo è un bel punto a vantaggio dei Tuple.


Ricapitolando:

  • Le Liste sono un tipo di dato che contiene svariati valori, anche tutti diversi tra di loro
  • Per accedere ai valori delle Liste possiamo usare il sistema di indicizzazione della Lista
  • L'indice parte da 0, e si possono usare numeri negativi per accedere dalla fine all'inizio
  • Si puó inoltre impostare un intervallo utilizzando i due punti per l'inizio o la fine del range
  • L'indice si usa inoltre per sostituire un elemento, o eliminarlo con l'istruzione DEL
  • I Tuple sono anch'essi degli elenchi di valori indicizzati, ma una volta creati sono immutabili

Menu della Serie