Strutture dati in Python e JES: liste, tuple, vettori e matrici
Fondamenti di Informatica · Python / Jython (JES)
Questi appunti raccolgono le strutture dati che si usano nel corso di Fondamenti di Informatica con JES (Jython
Environment for Students). JES esegue Jython, cioè Python 2.7 sulla Java Virtual Machine: la sintassi è quella di Python,
con qualche differenza rispetto a Python 3 che viene segnalata dove serve. Tutti gli esempi sono stati eseguiti.
1. Che cos'è una sequenza
Una struttura dati è un modo di raggruppare più valori sotto un unico nome. In Python le strutture più usate sono le
sequenze: collezioni ordinate di elementi, in cui ogni elemento occupa una posizione precisa. Le sequenze che servono
nel corso sono tre: le stringhe, le liste e le tuple.
Ogni posizione è identificata da un indice intero. Il primo elemento ha indice 0, l'ultimo ha indice , dove
len(s) - 1
restituisce il numero di elementi. Python ammette anche indici negativi, che contano dalla fine: è l'ultimo
len s[-1]
elemento, il penultimo.
s[-2]
>>> nomi = ["Anna", "Bruno", "Carla", "Dario"]
>>> len(nomi)
4
>>> nomi[0]
'Anna'
>>> nomi[-1]
'Dario'
Usare un indice che non esiste (qui ) provoca l'errore . È l'errore
nomi[4] IndexError: list index out of range
più comune quando si lavora con le sequenze e quasi sempre nasce dal dimenticare che si parte da 0.
Slicing
Con la notazione si estrae una fetta (slice): gli elementi dall'indice incluso all'indice escluso. Se si omette
s[i:j] i j
si parte dall'inizio, se si omette si arriva alla fine. Un terzo numero, , indica di quanto avanzare.
i j s[i:j:passo]
>>> v = [10, 20, 30, 40, 50, 60]
>>> v[1:4]
[20, 30, 40]
>>> v[:2]
[10, 20]
>>> v[3:]
[40, 50, 60]
>>> v[::2]
[10, 30, 50]
>>> v[::-1]
[60, 50, 40, 30, 20, 10]
Lo slicing crea sempre una nuova sequenza e non modifica quella di partenza. è quindi un modo rapido per
v[:]
ottenere una copia di una lista.
2. Le stringhe come sequenze
Una stringa è una sequenza di caratteri, quindi indici, e slicing funzionano come sopra: se ,
len parola = "python"
allora vale e vale . La differenza fondamentale è che le stringhe sono
parola[0] 'p' parola[1:4] 'yth'
immutabili: produce . Per "modificarla" si costruisce una nuova stringa, per esempio
parola[0] = "J" TypeError
, che vale .
"J" + parola[1:] 'Jython' 1
3. Le liste
La lista è la struttura più flessibile: una sequenza mutabile di elementi, anche di tipo diverso, scritta tra parentesi
quadre e separata da virgole. La lista vuota è .
[]
Creare e modificare
A differenza delle stringhe, gli elementi di una lista si possono sostituire direttamente con un assegn