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
- Data la seguente stringa: parola = “deambulare” scrivi in due modi diversi l’istruzione che stampi il suo quinto carattere.
- Data la stringa precedente scrivi le istruzioni per stampare le sotto stringhe: “dea”, “re”, “bula”, “emuae”,
- Costruisci la stringa che contenga dieci volte la parola “Ciao”.
- Costruisci la stringa che contenga dieci righe ciascuna contenente dieci “Ciao”.