W3docs

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))   # 13

Creare 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 quotes

String 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.

python— editable, runs on the server

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].

ParteSignificatoValore predefinito
startIndice del primo carattere da includere0
stopIndice del primo carattere da escluderelen(s)
stepNumero di caratteri da avanzare ogni volta1
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 string

Per 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.

python— editable, runs on the server

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, three

Ripetizione di String

python— editable, runs on the server

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)  # True

Lunghezza di una String

len() restituisce il numero di caratteri in una string:

s = "Python"
print(len(s))   # 6

empty = ""
print(len(empty))   # 0

Caratteri di Escape

Alcuni caratteri non possono essere digitati letteralmente all'interno di una string. Python usa il backslash \ per introdurre le sequenze di escape:

SequenzaCarattere
\nNuova riga
\tTabulazione
\\Backslash letterale
\'Virgoletta singola
\"Virgoletta doppia
\rRitorno a capo
print("Line one\nLine two")
# Line one
# Line two

print("Name:\tAlice")
# Name:	Alice

path = "C:\\Users\\Alice"
print(path)   # C:\Users\Alice

Per 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()

python— editable, runs on the server

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.14

Per 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"))   # True

Sostituzione 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 only

Divisione e unione

csv = "apple,banana,cherry"
items = csv.split(",")
print(items)   # ['apple', 'banana', 'cherry']

print(" | ".join(items))   # apple | banana | cherry

Verifica del contenuto della string

python— editable, runs on the server

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 assignment

Per 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)           # Hello

La 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'>

Esercitati

Pratica
In Python, which of the following are valid ways for declaring a string?
In Python, which of the following are valid ways for declaring a string?
Was this page helpful?