Stringhe

Come usare dati che sono sequenze di altri dati.

Nel capitolo precedente abbiamo creato una variabile data associata all’oggetto stringa: "13-10-2001". Una stringa è una sequenza di caratteri. È possibile estrarre ogni elemento di una sequenza usando gli indici. Dobbiamo tenere presente che in Python le sequenze iniziano con l’indice 0, quindi se vogliamo ottenere il primo carattere di una stringa dobbiamo estrarre l’elemento di indice 0:

>>> data = "13-10-12"
>>> print(data[0])
1

È anche possibile usare un indice che conta partendo dalla fine della sequenza si ottiene questo effetto usando come indice un numero negativo:

>>> print(data[-1])
2

Per mezzo dell’indicizzazione si può ottenere un elemento della sequenza, ma uno strumento simile permette anche di ottenere una sotto sequenza. Ad esempio per ottenere i primi due elementi posso scrivere:

>>> print(data[0:2])
13

Da notare che l’istruzione precedente restituisce 2 elementi quello di posizione 0 e quello di posizione 1 (cioè esattamente 2-0 elementi). Questa operazione si chiama “affettamento” (“slicing”) il risultato è sempre primo elemento compreso e ultimo escluso.

Se volessi estrarre la parte di stringa relativa al mese dovrei scrivere:

>>> print(data[3:5])
10

Da notare che gli elementi estratti sono quello di indice 3 e quello di indice 4,

In una fetta di una sequenza il primo e l’ultimo elemento possono essere esclusi, così l’istruzione precedente è equivalente a:

>>> print(data[:2])
13

Se voglio gli ultimi 2 caratteri posso scrivere:

>>> print(data[-2:])
12

Che significa: “dal penultimo compreso fino alla fine della sequenza”. A volte può tornare utile ottenere tutti gli elementi di una sequenza in questo caso l’istruzione è:

>>> print(data[:])
13-10-12

A volte servono degli elementi che non si trovano di seguito ma che sono disposti ad intervalli regolari. Ad esempio se dalla solita data dovessi estrarre i due trattini, dovrei estrarre i caratteri di posizione 3 e di posizione 6 cioè un carattere ogni 3. L’istruzione che fa questo è:

>>> print(data[::3])
--

In Python si possono scrivere espressioni con le stringhe: una stringa più un’altra stringa dà come risultato la concatenazione dei due operandi:

>>> s0 = "cocco"
>>> s1 = "drillo"
>>> s2 = "bello"
>>> print(s0+s1)
coccodrillo
>>> print(s0+s2)
coccobello

Una stringa può anche essere moltiplicata per un numero intero, che risultato darà?

Esistono altri oggetti si tipo sequenza oltre alle stringhe: tuple, liste. Questi oggetti sono sequenze di altri oggetti qualunque, cioè possono contenere numeri, stringhe, ma anche tuple o liste o qualunque altro oggetto Python. Questi tipi e altri tipi di oggetti Python verranno trattati più avanti. Ma anticipiamo qui alcuni metodi dell’oggetto stringa che permette di trasformare una stringa in una lista di parole e viceversa di ricostruire una stringa a partire dalla lista:

>>> stringa = 'sopra la panca la capra campa'
>>> stringa.split()
['sopra', 'la', 'panca', 'la', 'capra', 'campa']
>>> lista = stringa.split()
>>> lista
['sopra', 'la', 'panca', 'la', 'capra', 'campa']
>>> ' '.join(lista)
'sopra la panca la capra campa'

Riassumendo

  • Una stringa è una successione ordinata di caratteri.

  • Per estrarre gli elementi di una successione si usa l’indicizzazione:

    <lista>[<indice>].
    
  • Il primo elemento di una successione ha indice 0, l’ultimo ha indice -1.

  • Si può anche estrarre una fetta di una successione (slicing):

    <successione>[inizio:fine]
    

    che restituisce gli elementi della successione da inizio compreso a fine escluso.

Prova tu

  1. Data la seguente stringa: parola = “deambulare” scrivi in due modi diversi l’istruzione che stampi il suo quinto carattere.
  2. Data la stringa precedente scrivi le istruzioni per stampare le sotto stringhe: “dea”, “re”, “bula”, “emuae”,
  3. Costruisci la stringa che contenga dieci volte la parola “Ciao”.
  4. Costruisci la stringa che contenga dieci righe ciascuna contenente dieci “Ciao”.