A Byte of Python

Sequenze

Liste, tuple e stringe sono, come già detto, esempi di sequenze. Ma cosa sono realmente, e quali caratteristiche hanno? Due delle principali caratteristiche che contraddistinguono una sequenza sono la possibilità di indicizzazione che permette di prelevare un particolare elemento direttamente dalla sequenza, e l'affettamento, termine un po' insolito per descrivere l'operazione mediante cui possiamo letteralmente selezionare una fetta o un intervallo di elementi in una sequenza.

usare le sequenze

Esempio 9.5. Usare le sequenze

				
#!/usr/bin/python
# Filename: seq.py

shoplist = ['apple', 'mango', 'carrot', 'banana']

# Indicizzazione o operazione di 'subscription'
print 'Item 0 is', shoplist[0]
print 'Item 1 is', shoplist[1]
print 'Item 2 is', shoplist[2]
print 'Item 3 is', shoplist[3]
print 'Item -1 is', shoplist[-1]
print 'Item -2 is', shoplist[-2]

# Affettamento di una lista
print 'Item 1 to 3 is', shoplist[1:3]
print 'Item 2 to end is', shoplist[2:]
print 'Item 1 to -1 is', shoplist[1:-1]
print 'Item start to end is', shoplist[:]

# Affettamento di una stringa
name = 'swaroop'
print 'characters 1 to 3 is', name[1:3]
print 'characters 2 to end is', name[2:]
print 'characters 1 to -1 is', name[1:-1]
print 'characters start to end is', name[:]
				
				

Output

				
$ python seq.py
Item 0 is apple
Item 1 is mango
Item 2 is carrot
Item 3 is banana
Item -1 is banana
Item -2 is carrot
Item 1 to 3 is ['mango', 'carrot']
Item 2 to end is ['carrot', 'banana']
Item 1 to -1 is ['mango', 'carrot']
Item start to end is ['apple', 'mango', 'carrot', 'banana']
characters 1 to 3 is wa
characters 2 to end is aroop
characters 1 to -1 is waroo
characters start to end is swaroop
				
				

Funzionamento

Innanzi tutto vediamo come usare l'indicizzazione per prelevare un singolo elemento di una sequenza. Questa operazione è meno comunemente chiamata anche operazione di subscription. Quando in una sequenza viene specificato un numero tra parentesi quadre come sopra mostrato, Python selezionerà il valore che corrisponde a quella posizione nella sequenza. Ancora una volta ricordiamo che Python inizia il conteggio da 0. Quindi, shoplist[0] corrisponde al primo valore e shoplist[3] corrisponde al quarto valore presente nella sequenza shoplist.

L'indice potrebbe anche essere un numero negativo, nel qual caso la posizione viene calcolata a partire dalla fine della sequenza. Ad esempio, shoplist[-1] si riferisce all'ultimo valore nella sequenza, mentre shoplist[-2] corrisponde al penultimo valore presente.

L'operazione di affettamento viene usata specificando il nome della sequenza seguito da una coppia opzionale di numeri separati dal carattere doppio punto (:) contenuti tra parentesi quadre. Da notare la somiglianza con l'indicizzazione usata fin ora; da ricordare invece che i numeri sono opzionali, ma non il doppio punto.

Il primo numero (prima del doppio punto) nell'operazione di affettamento si riferisce alla posizione a partire dalla quale parte la fetta, mentre il secondo numero (dopo il doppio punto) indica la posizione dove termina la fetta. Se il primo numero non è specificato, Python prende come posizione di partenza quella iniziale della sequenza. Se il secondo numero è omesso, Python prende come elemento finale quello al termine della sequenza. La fetta restituita inizia dalla posizione di partenza e termina un elementi prima della posizione finale: il valore di inizio è incluso mentre quello terminale è escluso dalla fetta.

Quindi shoplist[1:3] restituisce una fetta della sequenza che inizia dalla posizione 1, include la posizione 2 e termina alla posizione 3 (esclusa), consta cioè di 2 elementi. Similmente, shoplist[:] restituisce una copia dell'intera sequenza.

È possibile affettare usando indici negativi. I numeri negativi sono usati per gestire posizioni a partire dal termine della sequenza. Per esempio, shoplist[:-1] restituisce una fetta della sequenza che esclude l'ultimo valore della sequenza ma contiene tutti gli altri.

L'aspetto interessante delle sequenze è che tuple, liste e stringhe possono essere trattate tutte nello stesso modo!