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.
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[:]
$ 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
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!