Python: Tuple

Le tuple sono liste immutabili.

Per definire una lista 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, 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 list.index(object) Restituisce la posizione di object.
int list.count(object) Conta il numero di ripetizioni di un valore

Conversione Lista-Tupla

Per convertire tra liste e tuple uso tuple() e list():

lista = 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

  1. Creare:

    1. Una tupla di due interi di valore 0 e 1.

    2. Una tupla di due stringhe, "una" e "tupla".

    3. 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.

    4. Una tupla di cento elementi: i numeri interi da 0 a 99.

      Hint: posso usare (indirettamente) range()?

    5. Una tupla con due elementi: la lista degli interi da 0 a 49 e la lista degli interi da 50 a 99.

    6. Una tupla con due elementi: la tupla degli interi da 0 a 49 e la tupla degli interi da 50 a 99.

  2. Date l = [0, 1, 2] e t = (0, 1, 2), che differenza c’e’ tra:

    1. Primo caso:

      x = l
      x[0] = 100
      
    2. Secondo caso:

      x = t
      x[0] = 100
      
  3. Data la tupla:

    tupla = (0, 1, 2, [3, 4, 5], 6, 7, 8)
    
    1. Di che tipo e’ il primo elemento della tupla? Quanto vale?
    2. Di che tipo e’ il quarto elemento della tupla? Quanto vale?
    3. Quanti elementi contiene la tupla?
    4. Quanti elementi contiene la lista contenuta nella tupla?
    5. Cambiare l’ultimo elemento della lista contenuta in tupla in "ultimo".
    6. Cambiare l’ultimo elemento di tupla in "ultimo". (Si puo’ fare?)