Image default
Corsi Programmazione Python

Tuple – Corso Python per principianti – Lezione 8

Abbiamo fin ora trattato due diverse strutture di tipi composti: le liste (lezione 6) e le stringhe (lezione 7). Notevoli sono le differenze tra i due tipi di dati, ma in particolare c’è da specificare che le stringhe sono una tipologia di dato immutabile, mentre le liste sono di tipologia mutabile. Le tuple fanno anch’esse parte dei tipi composti e si distinguono, come le stringhe, dalle liste, dall’essere un tipo di dato immutabile.

Cosa significa che un tipo di dato è immutabile o mutabile?

  • Un dato immutabile è un dato che una volta creato non puoi modificarlo internamente, ma realmente puoi solo assegnare un altro valore al dato.
  • Un dato mutabile, invece, è un dato modificabile internamente attraverso degli operatori o metodi.

Ma come si usa una tupla?

Per prima cosa, come tutte le altre tipologie di dati bisogna dare una struttura sintattica, molto semplice da ricordare. Le tuple, così come le liste, contengono più elementi di diversa tipologia. Facciamo un esempio:

>>> tupla1 = (‘HDDev’, ‘.net’, 6)   # Tupla convenzionale
>>> tupla2 = ‘HDDev’, ‘.net’, 6

Come avrai notato, ho istanziato due tuple in modo diverso, ma simile. La tupla1, come espresso nel commento del codice, è stata creata in modo convenzionale, mentre la tupla2 ha una sintassi più semplice da ricordare. Come puoi osservare gli elementi nella tupla convenzionale sono racchiusi tra parentesi tonde, tutto ciò per una maggiore chiarezza. Gli elementi sono distinti gli uni dagli altri da una virgola, tuttavia c’è da specificare che se una tupla comprende un solo elemento esso deve essere seguito da una virgola finale. Ecco un esempio:

>>> tupla = (‘HDDev’,)
>>> type(tupla)   # Metodo informativo sul tipo di dato
<class ‘tuple’>

Quest’ultima osservazione sintattica è molto importante, infatti se avvenisse una dichiarazione senza virgola finale all’interno di una tupla con un singolo elemento, noteresti che la tua “tupla” sarebbe in realtà una stringa. Ecco un esempio:

>>> tupla = (‘HDDev’)
>>> type(tupla)
<class ‘str’>

Operatori delle tuple

Le tuple sfruttano quasi tutti gli operatori funzionanti sulle liste e sulle stringhe. In particolare sono a stretto contatto con le liste e sfruttano tutti i suoi operatori, tranne certamente quelli che hanno il compito di modificare gli elementi all’interno della tupla, che non hanno motivo di esistere essendo essa una struttura immutabile.

Gli operatori usati sono quindi:

  • la concatenazione (+)
  • la ripetizione (*)
  • l’indicizzazione ([indice])
  • l’operatore di ricerca (in)
  • lo slicing ([a:b])

Vediamo alcuni esempi:

>>> (‘guida’, ‘python’) + (‘HDDev’, ‘.net’)   # Concatenazione
(‘guida’, ‘python’, ‘HDDev’, ‘.net’)
>>> (‘lezione tuple’,) * 2   # Ripetizione
(‘lezione tuple’‘lezione tuple’)
>>> tupla = (‘guida’, ‘python’, ‘HDDev’, ‘.net’)
>>> tupla[2]   # Indicizzazione
‘HDDev’
# Operatore di ricerca
>>> ‘python’ in tupla
True
>>> ‘tupla’ in tupla
False
# Slicing
>>> tupla[:2]
(‘guida’, ‘python’)
>>> tupla[2:]
(‘HDDev’, ‘.net’)
>>> tupla[1:-1]
(‘python’, ‘HDDev’)

Essendo un tipo immutabile, non supporta quindi i metodi della liste per le modifiche degli elementi, infatti l’uso di un qualsiasi metodo per modificare la tupla causerà un errore:

>>> tupla = (1, 2, 3, 4)
>>> tupla.append(5)
Traceback (most recent call last):
File “<pyshell#29>”, line 1, in <module>
tupla.append(5)
AttributeError: ‘tuple’ object has no attribute ‘append’

Così come il metodo append(oggetto), anche il metodo remove(oggetto), il semplice assegnamento indicizzato e gli altri metodi di modifica della struttura o di un singolo elemento causeranno un errore se si usano con le tuple.

Scambio di elementi tra 2 o più variabili

Un ulteriore uso delle tuple coincide con lo scambio di elementi tra due o più variabili. In effetti per il normale scambio di dati tra due variabili abbiamo bisogno di una terza variabile temporanea, guarda questo esempio:

>>> temp = a    # temp contiene a
>>> a = b   # a contiene b
>>> b = temp   # b contiene temp (vecchio valore in a)

Utilizzando le tuple faciliterà queste tipologie di scambi non solo tra due variabili, ma tra più variabili, stando però attenti che il numero di elementi di sinistra siano uguali al numero degli elementi a destra, come nell’esempio seguente:

>>> (a, b) = (b, a)
>>> (a, b, c, d) = (b, d, a, c)

Metodi proprietari delle tuple

index(oggetto)
Restituisce l’indice dell’oggetto nella tupla, la prima posizione trovata se esistono due oggetti
count(oggetto)
Restituisce il numero di volte che l’oggetto è contenuto nella tupla

Ecco alcuni esempi:

>>> tupla = (15, 30, 45, 30)
>>> tupla.index(30)   # Metodo index(oggetto)
1
>>> tupla.count(30)   # Metodo count(oggetto)
2

Così come le stringhe e le liste, le tuple hanno un metodo che restituisce la lunghezza della tupla. Il metodo len(tupla) svolge quindi questa funzione, ovvero restituisce il numero di elementi che essa contiene:

>>> tupla = (‘HDDev’, ‘.net’, ‘Python’)
>>> len(tupla)
3

Conversione tuple/liste

Python è un linguaggio di programmazione ad alto livello e ci permette di fare molte operazioni con una semplicità disarmante, ad esempio se si ha una tupla e la si vuole convertire in liste, o viceversa, basta usare due semplici funzioni: tuple() e list() ed il gioco è fatto.

Qui ti riporto degli esempi pratici per convertire una tupla in una lista e, dopo una lista in una tupla.

>>> tupla = (1, 2, 3, 4)
>>> tupla = list(tupla)   # Funzione list(tupla) (conversione da tupla a lista)
>>> type(tupla)
<class ‘list’>
>>> tupla = tuple(tupla)   # Funzione tuple(lista) (conversione da lista a tuple)
>>> type(tupla)
<class ‘tuple’>

C’è qualcosa che non è molto chiara? Lascia un commento, sono a tua completa disposizione.

Sei soddisfatto/a di questa lezione ed hai imparato nuove cose? Ringraziaci con un +1,  per te è solo un click, per noi è molto importante, grazie ancora. 🙂

Lezione 7: Stringhe<—> Lezione 9: Moduli e Funzioni

Prima di andar via, se ti siamo stati d'aiuto, che ne dici di lasciarci un like su Facebook? Per noi è importante 🙂

Related posts

Console degli sviluppatori: cos’è e come attivarla

Simone Rossi

Installazione ambiente Python – Corso Python per principianti – lezione 1

Andrea Chiera

Moduli e Funzioni – Corso Python per principianti – Lezione 9

Andrea Chiera