Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial

Stringhe in Python

Come trattare le stringhe in Python: le funzioni principali per definire sottostringhe, lo slicing e i metodi disponibili per manipolare porzioni di testo
Come trattare le stringhe in Python: le funzioni principali per definire sottostringhe, lo slicing e i metodi disponibili per manipolare porzioni di testo
Link copiato negli appunti

In questa lezione ci occupiamo di come trattare le stringhe in Python. Abbiamo già visto che per dichiarare una stringa è sufficiente assengare ad una nuova variabile un testo racchiuso tra virgolette: è possibile racchiudere il suo valore indifferentemente tra apici (carattere ') o doppi apici (carattere ").

Questo permette di superare facilmente il problema dell’utilizzo dei suddetti caratteri nel valore stesso della stringa, ad esempio "l'acqua" o 'Egli disse: "Acqua"'. È anche possibile usare il carattere di escape \ prima di ' o ": 'Egli disse: "L\'acqua"'.

Le stringhe, così come le liste o le tuple, sono un tipo particolare di sequenze e perciò supportano tutte le operazioni comuni alle sequenze. Vediamone alcune.

Indexing e Slicing

In Python, è possibile accedere agli elementi di una sequenza, usando la sintassi sequenza[indice]. Questo restituirà l'elemento in posizione indice (il primo elemento ha sempre indice 0). È inoltre possibile specificare indici negativi che partono dalla fine della sequenza (l'ultimo elemento ha indice -1, il penultimo -2, ecc.). Questa operazione è chiamata indexing.

>>> s = 'Python'
>>> s[0]  # elemento in posizione 0 (il primo)
'P'
>>> s[5]  # elemento in posizione 5 (il sesto)
'n'
>>> s[-1]  # elemento in posizione -1 (l'ultimo)
'n'
>>> s[-4]  # elemento in posizione -4 (il quartultimo)
't'

La sintassi sequenza[inizio:fine] ci permette di ottenere una nuova sequenza dello stesso tipo che include tutti gli elementi partendo dall'indice inizio (incluso) all'indice fine (escluso). Se inizio è omesso, gli elementi verranno presi dall'inizio, se fine è omesso, gli elementi verranno presi fino alla fine. Questa operazione è chiamata slicing (letteralmente "affettare").

>>> s = 'Python'
>>> s[0:2]  # sottostringa con elementi da 0 (incluso) a 2 (escluso)
'Py'
>>> s[:2]   # dall'inizio all'elemento con indice 2 (escluso)
'Py'
>>> s[3:5]  # dall'elemento con indice 3 (incluso) a 5 (escluso)
'ho'
>>> s[4:]   # dall'elemento con indice 4 (incluso) alla fine
'on'
>>> s[-2:]  # dall'elemento con indice -2 (incluso) alla fine
'on'

Contenimento

Gli operatori in e not in possono essere usati per verificare se un elemento fa parte di una sequenza o no. Nel caso delle stringhe, è anche possibile verificare se una sottostringa è contenuta in una stringa:

>>> s = 'Python'
>>> 'P' in s  # controlla se il carattere 'P' è contenuto nella stringa s
True
>>> 'x' in s  # il carattere 'x' non è in s, quindi ritorna False
False
>>> 'x' not in s  # "not in" esegue l'operazione inversa
True
>>> 'Py' in s  # controlla se la sottostringa 'Py' è contenuto nella stringa s
True
>>> 'py' in s  # il controllo è case-sensitive, quindi ritorna False
False

Concatenamento, ripetizione e lunghezza

È possibile usare l'operatore + per concatenare sequenze, e * per ripetere sequenze:

>>> 'Py' + 'thon'
'Python'
>>> 'Py' * 2
'PyPy'
>>> 'Ba' + 'na' * 2
'Banana'

La funzione built-in len() può essere usata per ottenere il numero di elementi in una sequenza:

>>> len('Python')
6
>>> s = 'Precipitevolissimevolmente'
>>> len(s)
26

Funzioni e Metodi

Prima di procedere, è necessario fare una breve parentesi per spiegare la differenza tra funzioni e metodi.

Abbiamo già visto alcune funzioni come len(). La funzioni accettano 0 o più argomenti e possono essere usate con oggetti di diversi tipi, usando la sintassi funzione(argomenti):

>>> len('Python')  # lunghezza di una stringa
6
>>> len(['PyPy', 'Jython', 'IronPython'])  # di una lista
3
>>> len({'a': 3, 'b': 5})  # di un dizionario
2

I metodi sono simili alle funzioni ma sono legati al tipo dell'oggetto e hanno una sintassi diversa: oggetto.metodo(argomenti). Così come le funzioni, i metodi possono accettare 0 o più argomenti:

>>> s = 'Python'
>>> s.upper()  # il metodo upper ritorna una nuova stringa tutta uppercase
'PYTHON'
>>> s.lower()  # il metodo lower ritorna una nuova stringa tutta lowercase
'python'

In questo esempio potete vedere due metodi forniti dal tipo str, che non sono disponibili per altri tipi.

help() e dir()

Due strumenti particolarmente utili per lavorare con funzioni e metodi sono le funzioni built-in help() e dir(). help(oggetto) restituisce una breve spiegazione riguardo all'oggetto passato come argomento. dir(oggetto) restituisce una lista di metodi e attributi dell'oggetto:

>>> len  # len è una funzione built-in
<built-in function len>
>>> help(len)  # si può passare len a help() per vedere una breve spiegazione
Help on built-in function len in module builtins:
len(obj, /)
    Return the number of items in a container.
>>> dir(str)  # restituisce una lista di metodi e attributi di str
[..., 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs',
 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isdecimal', 'isdigit',
 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper',
 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind',
 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines',
 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
>>> str.upper  # upper è un metodo di str
<method 'upper' of 'str' objects>
>>> help(str.upper)  # si può passare a help() per vedere una breve spiegazione
Help on method_descriptor:
upper(...)
    S.upper() -> str
    Return a copy of S converted to uppercase.

Questi strumenti vi consentono di esplorare interattivamente funzioni e metodi e capirne il funzionamento:

>>> help(str.replace)  # visualizza l'help per il metodo str.replace
Help on method_descriptor:
replace(...)
    S.replace(old, new[, count]) -> str
    Return a copy of S with all occurrences of substring
    old replaced by new.  If the optional argument count is
    given, only the first count occurrences are replaced.
>>> 'Python'.replace('thon', 'Py')  # sostituisce 'thon' con 'Py' in 'Python'
'PyPy'
>>> s = 'Python, Python, Python!'
>>> s.replace('thon', 'Py', 2)  # come sopra, ma massimo 2 sostituzioni
'PyPy, PyPy, Python!'

La documentazione ufficiale di Python include una sezione sui metodi delle stringhe.

Formattazione delle Stringhe

La maggior parte dei metodi delle stringhe sono semplici da capire. C'è tuttavia un metodo che richiede una spiegazione più dettagliata: str.format(). Questo metodo permette di formattare stringhe, ovvero inserire alcuni valori variabili all'interno di una stringa predefinita:

>>> raggio = 8.4
>>> area = 3.14 * raggio**2
>>> circ = 2 * 3.14 * raggio
>>> s = "L'area è {}, la circonferenza è {}."
>>> s.format(area, circ)
"L'area è 221.5584, la circonferenza è 52.752."

In questo esempio possiamo vedere che:

  • le variabili area e circ vengono definite a partire dal raggio di un cerchio;
  • la stringa s viene definita, e contiene due placeholder ("segnaposto"): {};
  • il metodo format viene chiamato sulla stringa s e l'area e la circonferenza vengono passati come argomenti;
  • il metodo format sostituisce i due placeholder con il valore dei due argomenti che ha ricevuto e ritorna una nuova stringa;

Oltre ad occuparsi di convertire gli argomenti in stringa e sostituirli ai placeholder, str.format() consente di controllare l'output specificando determinate opzioni (come numero di decimali, allineamento, ecc.) tra le {}. La documentazione ufficiale include una sezione con numerosi esempi di utilizzo di str.format().

Formattazione "vecchio stile"

Prima dell'implementazione di str.format() veniva usato un altro metodo ispirato alla formattazione eseguita dalla funzione printf di C. Questo metodo usa l'operatore % per separare la stringa di formattazione dagli argomenti, e, anche se il funzionamento è simile a str.format(), questo metodo è meno flessibile.

>>> raggio = 8.4
>>> area = 3.14 * raggio**2
>>> circ = 2 * 3.14 * raggio
>>> s = "L'area è %f, la circonferenza è %f."
>>> s % (area, circ)
"L'area è 221.558400, la circonferenza è 52.752000."

Potete notare che questo metodo usa %f come placeholder invece di {}. Oltre a %f (per i float), esistono anche altri tipi di placeholder, come %d per gli interi o %s per le stringhe. La documentazione ufficiale include una sezione che spiega i vari tipi di placeholder e opzioni aggiuntive.

Ti consigliamo anche