
Liste, Tuple, Dizionari
Sono i veri "cavalli di battaglia" di Python.
Strutture flessibilissime, facili da usare, potenti
Immediate da usare, riconoscibili dal tipo di parentesi che le delimita
[ ] ( ) { }
Dipartimento di Informatica
I.I.S. "Blaise Pascal" - Reggio Emilia
Liste, Tuple, Dizionari
Sono i veri "cavalli di battaglia" di Python.
Strutture flessibilissime, facili da usare, potenti
Immediate da usare, riconoscibili dal tipo di parentesi che le delimita
[ ] ( ) { }
Liste
Struttura dinamica e polimorfa.
E' il corrispondente di una Collection di Java, o dell'Array dei sogni del C++
Un array che può:
La lista si definisce e usa utilizzando le parentesi quadre
Ecco una serie di esempi di liste:
l1 = [1, 2, 3, 4]
l2 = [5, 'sei', "sette", 8.0]
l3 = [ ["nove", 10] , 11 ]
l4 = [ ] # lista vuota
Le liste possono contenere da 0 a N elementi di tipi diversi: anche altre liste (o tuple o dizionari, etc..)
Operazioni su liste : accesso agli elementi
Abbiamo già visto le operazioni di accesso ai caratteri di una stringa.
Sono molto simili: la differenza è che la stringa è immutabile, la lista no.
L = [1, 2, "tre", [4, 5, "sei"] ]
print(L[0])
print(L[1:4])
print(L[:-1])
print(L[3][1])
1
[2, 'tre', [4, 5, 'sei']]
[1, 2, 'tre']
5
Una lista di liste è esattamente una matrice anche se le righe possono avere dimensione diversa!!
Operazioni su liste : inserimento
A differenza delle stringhe, le liste si possono modificare
L = [1, 2, 3, 4]
#Aggiungere un elemento in coda
L.append("ultimo")
#Aggiungere un elemento in testa
L.insert(0, "primo")
#Aggiungere un elemento in posizione i-esima
L.insert(3, 'quattro')
print(L)
['primo', 1, 2, 'quattro', 3, 4, 'ultimo']
Operazioni su liste : modifica un elemento
L = [1, 2, 3, 4]
L[2] = "terzo"
print(L)
[1, 2, 'terzo', 4]
Operazioni su liste : modifica più elementi
L = [1, 2, 3, 4]
L[1:3] = ["secondo", "terzo"]
print(L)
[1, 'secondo', 'terzo', 4]
Operazioni su liste : rimuovere un elemento
L = [1, 2, 3, 4]
L.remove(3)
print(L)
[1, 2, 'terzo', 4]
rimuovere un elemento che non esiste non si può
L = [1, 2, 3, 4]
L.remove(5)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: list.remove(x): x not in list
Operazioni su liste : rimuovere un elemento
rimuovere un elemento dalla coda (il contrario di append)
L = [1, 2, 3, 4]
elem = L.pop()
print(L)
print(elem)
[1, 2, 3]
4
Operazioni su liste : rimuovere un elemento
remove elimina solo la prima occorrenza del valore cercato
L = [1, 2, 3, 2, 4]
L.remove(2)
print(L)
[1, 3, 2, 4]
Operazioni su liste : rimuovere più elementi contigui
e' un trick...
L = [1, 2, 3, 4, 5, 6, 7, 8]
# per rimuovere 3, 4, 5
L = L[0:2] + L[5:]
print(L)
[1, 2, 6, 7, 8]
Operazioni su liste : somma
L'operatore + concatena due liste (come per le stringhe)
L1 = [1, 2, 3, 4]
L2 = [5, 6, 7]
L3 = L1 + L2
print(L3)
[1, 2, 3, 4, 5, 6, 7]
L'operatore - invece non funziona... :-(
L1 = [1, 2, 3, 4]
L2 = [2, 3]
L3 = L1 - L2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'list' and 'list'
Operazioni su liste : ordinamento
L1 = [4, 1, 3, 2]
L1.sort() # procedura
L2 = ["una", "serie", "di", "stringhe"]
L2.sort()
print("L1 =", L1)
print("L2 =", L2)
L1 = [1, 2, 3, 4]
L2 = ['di', 'serie', 'stringhe', 'una']
l'ordinamento funziona se è presente una funzione di ordinamento booleana. Di default l'ordine lessicografico/numerico
Operazioni su liste : ribaltamento
L2 = ["una", "serie", "di", "stringhe"]
L2.reverse()
print("L2 =", L2)
L2 = ['stringhe', 'di', 'serie', 'una']
Operazioni su liste : ricerca e conteggio
L = [6, 7, 8, 1, 2, 3, 4, 5, 7]
print(L.index(8))
print(L.index(0))
print(L.count(7))
print(L.count(0))
2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: 0 is not in list
2
0
Operazioni su liste : iterazione per elemento
E' possibile accedere ad ogni elemento di una lista con la seguente sintassi:
L = ["uno", "due", "tre"]
for element in L:
print(element)
uno
due
tre
La variabile element è solo un nome simbolico che vale all'interno del ciclo e
assume, in ogni iterazione, il valore dei vari elementi della lista
Posso ovviamente usare anche un altro nome!!
L = ["Ciao", "ragazzi"]
for oggetto in L:
print(oggetto)
Operazioni su liste : iterazione per posizione ed elemento
Se ho bisogno di sapere anche la posizione di un elemento, oltre al suo valore possiamo usare la funzione predefinita enumerate() sulla lista:
L = ["uno", "due", "tre"]
for posizione, elemento in enumerate(L):
print(posizione, elemento)
0 uno
1 due
2 tre
In un colpo solo ottengo il valore e la posizione di ognuno degli elementi di una lista!
approfondisci
[https://www.geeksforgeeks.org/enumerate-in-python/]
title: Programmazione in Python
Operazioni su liste : test booleano
Il valore False per le liste è la lista vuota
L1 = ["uno", "due", "tre"]
if L1:
print("La lista L1 non è vuota e contiene ", len(L1), "elementi")
L2 = [ ]
if not L2:
print("La lista L2 è vuota")
else:
print("La lista non è vuota e contiene ", len(L2), "elementi")
La lista L1 non è vuota e contiene 3 elementi
La lista L2 è vuota
Dipartimento di Informatica
I.I.S. "Blaise Pascal" - Reggio Emilia