Python Strings: Guida Completa
Impara le Python strings: creazione, indicizzazione, slicing, f-string, metodi integrati ed esempi pratici eseguibili.
Le string sono uno dei tipi di dato più utilizzati in Python. Ogni volta che un programma legge un file, visualizza un messaggio o analizza un input, lavora con le string. Questo capitolo spiega come creare string, indicizzarle, suddividerle in slice, usare i metodi integrati ed evitare i problemi più comuni.
Cos'è una String in Python?
Una string è una sequenza ordinata e immutabile di caratteri Unicode. "Immutabile" significa che non è mai possibile modificare un carattere direttamente nella string — ogni operazione che sembra modificarla crea in realtà una nuova string. Le string possono contenere lettere, cifre, punteggiatura, spazi bianchi o qualsiasi carattere Unicode (emoji incluse).
greeting = "Hello, world!"
print(type(greeting)) # <class 'str'>
print(len(greeting)) # 13Creare String
Python accetta tre stili di virgolette, tutti equivalenti tra loro:
single = 'Python'
double = "Python"
triple = """Python""" # triple-double also works as '''Python'''Virgolette singole e doppie
Si usa lo stile che evita di dover inserire un carattere di escape all'interno della string:
message1 = "It's a great day" # apostrophe is fine inside double quotes
message2 = 'She said "hello"' # double quote is fine inside single quotesString a tripla virgoletta (multilinea)
Le triple virgolette permettono a una string di estendersi su più righe senza sequenze di escape:
poem = """Roses are red,
Violets are blue,
Python is awesome,
And so are you."""
print(poem)Output:
Roses are red,
Violets are blue,
Python is awesome,
And so are you.Le string a tripla virgoletta sono anche il modo convenzionale per scrivere docstring — i blocchi di documentazione che compaiono all'inizio di funzioni, classi e moduli.
Convertire altri tipi in string
Si usa la funzione integrata str() per convertire qualsiasi oggetto nella sua rappresentazione testuale:
num = 42
pi = 3.14
flag = True
print(str(num)) # '42'
print(str(pi)) # '3.14'
print(str(flag)) # 'True'Indicizzare i Caratteri
Python usa l'indicizzazione a base zero: il primo carattere si trova all'indice 0. È possibile usare anche indici negativi — -1 fa riferimento all'ultimo carattere, -2 al penultimo, e così via.
Accedere a un indice fuori dall'intervallo valido genera un IndexError.
Slicing delle String
Uno slice estrae una porzione di una string usando la sintassi s[start:stop:step].
| Parte | Significato | Valore predefinito |
|---|---|---|
start | Indice del primo carattere da includere | 0 |
stop | Indice del primo carattere da escludere | len(s) |
step | Numero di caratteri da avanzare ogni volta | 1 |
s = "Hello, World!"
print(s[0:5]) # Hello — characters at indexes 0–4
print(s[7:]) # World! — from index 7 to the end
print(s[:5]) # Hello — from the start to index 4
print(s[-6:]) # World! — last 6 characters
print(s[::2]) # Hlo ol! — every other character
print(s[::-1]) # !dlroW ,olleH — reversed stringPer un approfondimento sulla sintassi dello slicing, consulta il capitolo Slicing Strings.
Concatenazione e Ripetizione di String
L'operatore + unisce due string; l'operatore * ripete una string un determinato numero di volte.
Per concatenazioni su larga scala all'interno di un ciclo, usa str.join() invece di + — è significativamente più veloce perché evita la creazione di oggetti string intermedi:
words = ["one", "two", "three"]
result = ", ".join(words)
print(result) # one, two, threeRipetizione di String
Gli Operatori in e not in
Verifica se una sottostring esiste all'interno di una string con in o not in:
text = "The quick brown fox"
print("quick" in text) # True
print("slow" in text) # False
print("slow" not in text) # TrueLunghezza di una String
len() restituisce il numero di caratteri in una string:
s = "Python"
print(len(s)) # 6
empty = ""
print(len(empty)) # 0Caratteri di Escape
Alcuni caratteri non possono essere digitati letteralmente all'interno di una string. Python usa il backslash \ per introdurre le sequenze di escape:
| Sequenza | Carattere |
|---|---|
\n | Nuova riga |
\t | Tabulazione |
\\ | Backslash letterale |
\' | Virgoletta singola |
\" | Virgoletta doppia |
\r | Ritorno a capo |
print("Line one\nLine two")
# Line one
# Line two
print("Name:\tAlice")
# Name: Alice
path = "C:\\Users\\Alice"
print(path) # C:\Users\AlicePer disabilitare completamente l'elaborazione degli escape, aggiungi il prefisso r per creare una raw string — utile per le espressioni regolari e i percorsi Windows:
pattern = r"\d+\.\d+" # treated literally, no escaping needed
print(pattern) # \d+\.\d+Consulta il capitolo Escape Characters per l'elenco completo.
Formattazione delle String
Python offre diversi modi per incorporare valori di variabili all'interno delle string.
f-string (consigliato — Python 3.6+)
Una f-string ha il prefisso f o F. Le espressioni all'interno di {} vengono valutate in fase di esecuzione:
name = "Alice"
age = 30
print(f"My name is {name} and I am {age} years old.")
# My name is Alice and I am 30 years old.
# Expressions work too
print(f"Next year I'll be {age + 1}.") # Next year I'll be 31.Metodo str.format()
Formattazione con % (legacy)
Il codice Python più datato usa la formattazione con %. La si incontra ancora, ma le f-string sono la preferenza moderna:
print("Hello, %s!" % "Dave") # Hello, Dave!
print("Pi ≈ %.2f" % 3.14159) # Pi ≈ 3.14Per una panoramica completa delle opzioni di formattazione, consulta i capitoli String Formatting e f-Strings.
Metodi Comuni per le String
Il tipo str di Python include decine di metodi integrati. I più usati sono mostrati di seguito.
Conversione del caso
s = "Hello, World!"
print(s.upper()) # HELLO, WORLD!
print(s.lower()) # hello, world!
print(s.capitalize()) # Hello, world!
print(s.title()) # Hello, World!
print(s.swapcase()) # hELLO, wORLD!Ricerca e conteggio
s = "hello, world"
print(s.find("o")) # 4 — index of first 'o', or -1 if not found
print(s.rfind("o")) # 8 — index of last 'o'
print(s.count("l")) # 3 — total occurrences of 'l'
print(s.startswith("he")) # True
print(s.endswith("ld")) # TrueSostituzione di sottostringhe
s = "I like cats. Cats are great."
print(s.replace("cats", "dogs"))
# I like dogs. Cats are great. (only lowercase 'cats' replaced)
print(s.replace("cats", "dogs").replace("Cats", "Dogs"))
# I like dogs. Dogs are great.Rimozione degli spazi bianchi
padded = " hello "
print(padded.strip()) # 'hello' — both ends
print(padded.lstrip()) # 'hello ' — left end only
print(padded.rstrip()) # ' hello' — right end onlyDivisione e unione
csv = "apple,banana,cherry"
items = csv.split(",")
print(items) # ['apple', 'banana', 'cherry']
print(" | ".join(items)) # apple | banana | cherryVerifica del contenuto della string
Per il riferimento completo, consulta il capitolo String Methods.
Immutabilità delle String — Un Errore Comune
Le string non possono essere modificate direttamente. Tentare di assegnare un valore a un indice genera un TypeError:
s = "hello"
# s[0] = "H" # TypeError: 'str' object does not support item assignmentPer modificare una parte di una string, occorre costruirne una nuova:
s = "hello"
s = "H" + s[1:] # slice off everything after index 0 and prepend "H"
print(s) # HelloLa variabile s ora punta a un diverso oggetto string — la string originale "hello" rimane invariata (e verrà raccolta dal garbage collector se nessun altro la riferisce).
String e bytes
Una string Python (str) contiene testo Unicode. Quando occorrono dati binari grezzi — ad esempio per scrivere su un file in modalità binaria o inviare dati sulla rete — si usa bytes:
b = b"hello" # bytes literal
s = b.decode("utf-8") # bytes → str
b2 = s.encode("utf-8") # str → bytes
print(type(b)) # <class 'bytes'>
print(type(s)) # <class 'str'>