Python: Tuple¶
Le tuple sono liste immutabili.
Per definire una tupla uso le parentesi tonde:
partners = ("BIOGRID:112315", "BIOGRID:108607")
Esempio. Se voglio creare una tupla con un solo elemento (puo’ capitare…) devo ricordarmi di usare la virgola, oltre alle parentesi tonde:
tupla = (0,)
print(tupla)
print(type(tupla))
print(len(tupla))
non_tupla = (0)
print(non_tupla)
print(type(non_tupla))
Come si vede, non_tupla
e’ un intero, 0
.
Operazioni¶
Ritorna | Operatore | Significato |
---|---|---|
int |
len(tuple) |
Restituisce la lunghezza della tuple |
tuple |
tuple + tuple |
Concatena le due tuple |
tuple |
tuple * int |
Replica la tupla |
bool |
object in tuple |
Contolla se un oggetto arbitrario appare nella tupla |
tuple |
tuple[int:int] |
Estrae una sotto-tupla |
Le tuple supportanto tutti gli operatori delle stringhe e delle liste, tranne l’assegnamento.
Esempio. Creo una tupla con elementi misti:
proteina = ("2B0Q", "phosphotransferase", "PF03881")
che contiene informazioni su una proteina. Posso accedere ai vari elementi come farei con una lista:
id_proteina = proteina[0]
print(id_proteina)
nome_proteina = proteina[1]
print(nome_proteina)
Pero’ non posso modificare la tupla:
>>> proteina[0] = "1A3A"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
Esempio. Proprio come le liste e gli intervalli, posso usare le tuple come input ad una list comprehension:
tripla = (1, 2, 3)
risultato = [2*numero for numero in tripla]
print(risultato)
print(type(risultato))
Il risultato di una list comprehension e’ comunque una lista.
Metodi¶
Ritorna | Metodo | Significato |
---|---|---|
int |
tuple.index(object) |
Restituisce la posizione di object. |
int |
tuple.count(object) |
Conta il numero di ripetizioni di un valore |
Conversione Lista-Tupla¶
Per convertire tra liste e tuple uso tuple()
e list()
:
lista = list(range(10))
tupla = tuple(lista)
print(tupla, type(tupla))
lista_2 = list(tupla)
print(lista_2, type(lista_2))
Ne segue che se proprio voglio “modificare” una tupla posso scrivere:
tupla = ("sono", "una", "tupla")
print(tupla)
copia = list(tupla)
copia.insert(2, "bella")
tupla = tuple(copia)
print(tupla)
In realta’ quello che ottengo e’ una nuova tupla che contiene gli elementi della vecchia tupla in aggiunta a …
Esercizi¶
Creare:
Una tupla di due interi di valore
0
e1
.Una tupla di due stringhe,
"una"
e"tupla"
.Una tupla di un solo elemento,
0
.Hint: ci sono due modi di farlo: usare la sintassi vista all’inzio del capitolo, oppure usare la conversione lista-tupla.
Una tupla di cento elementi: i numeri interi da
0
a99
.Hint: posso usare (indirettamente)
range()
?Una tupla con due elementi: la lista degli interi da
0
a49
e la lista degli interi da50
a99
.Una tupla con due elementi: la tupla degli interi da
0
a49
e la tupla degli interi da50
a99
.
Date
l = [0, 1, 2]
et = (0, 1, 2)
, che differenza c’e’ tra:Primo caso:
x = l x[0] = 100
Secondo caso:
x = t x[0] = 100
Data la tupla:
tupla = (0, 1, 2, [3, 4, 5], 6, 7, 8)
- Di che tipo e’ il primo elemento della tupla? Quanto vale?
- Di che tipo e’ il quarto elemento della tupla? Quanto vale?
- Quanti elementi contiene la tupla?
- Quanti elementi contiene la lista contenuta nella tupla?
- Cambiare l’ultimo elemento della lista contenuta in
tupla
in"ultimo"
. - Cambiare l’ultimo elemento di
tupla
in"ultimo"
. (Si puo’ fare?)
Soluzioni¶
Soluzioni:
coppia_di_interi = (0, 1) print(type(coppia_di_interi)) # tuple coppia_di_stringhe = ("una", "tupla") print(type(coppia_di_stringhe)) # tuple un_solo_elemento = (0,) print(type(un_solo_elemento)) # tuple print(len(un_solo_elemento)) # 1 un_solo_elemento_alt = tuple([0]) print(type(un_solo_elemento_alt)) # tuple print(len(un_solo_elemento_alt)) # 1 sbagliato = (0) print(type(sbagliato)) # int print(len(sbagliato)) # errore! cento_elementi = tuple(range(100)) print(type(cento_elementi)) # tuple coppia_di_liste = (range(50), range(50, 100)) print(type(coppia_di_liste)) print(type(coppia_di_liste[0])) coppia_di_tuple = (tuple(range(50)), tuple(range(50, 100))) print(type(coppia_di_tuple)) print(type(coppia_di_tuple[0]))
Soluzioni:
l = [0, 1, 2] t = (0, 1, 2) # x si riferisce ad una lista, il codice sostituisce # il primo elemento con 100 x = l x[0] = 100 # x ora si riferisce ad una tupla, che e' immutabile: # non posso sostituire i suoi elementi, Python da' # errore x = t x[0] = 100 # errore!
Soluzioni:
tupla = (0, 1, 2, [3, 4, 5], 6, 7, 8) print(tupla[0]) # 0 print(type(tupla[0])) # int print(tupla[3]) # [3, 4, 5] print(type(tupla[3])) # list print(len(tupla)) # 9 print(len(tupla[3])) # 3 tupla[3][-1] = "ultimo" print(tupla) # ebbene lo posso fare! ho "modificato" la # tupla modificando la lista contenuta # in essa. tupla[-1] = "ultimo" # errore! # non posso modificare la tupla "direttamente" # e' un oggetto immutabile