W3docs

Modificare le Stringhe

Impara a modificare le stringhe in Python con concatenazione, slicing, metodi per le maiuscole, replace, strip, split, join e altro. Include esempi eseguibili.

Le stringhe Python sono sequenze di caratteri racchiuse tra virgolette. Sebbene le stringhe siano immutabili — non è possibile modificarle direttamente — Python offre un ricco insieme di operatori e metodi che restituiscono stringhe nuove e modificate. Questo capitolo tratta le tecniche più importanti: concatenazione, ripetizione, conversione di maiuscole/minuscole, slicing, sostituzione di sottostringhe, rimozione degli spazi, suddivisione e unione, e altro ancora.

Concetto Chiave: Le Stringhe Sono Immutabili

Prima di procedere, è importante capire che ogni metodo di "modifica" restituisce una nuova stringa. La stringa originale non viene mai modificata.

greeting = "hello"
upper_greeting = greeting.upper()

print(greeting)        # hello  (unchanged)
print(upper_greeting)  # HELLO  (new string)

Questo significa che devi assegnare il risultato a una variabile (o usarlo direttamente) per mantenere la modifica.

Concatenazione di Stringhe

La concatenazione combina due o più stringhe in una sola usando l'operatore +. Puoi concatenare tutte le stringhe di cui hai bisogno.

Concatenare stringhe in Python

python— editable, runs on the server

Concatenare Variabili e Letterali

Puoi mescolare variabili stringa con letterali stringa:

first_name = "Ada"
last_name  = "Lovelace"
full_name  = first_name + " " + last_name
print(full_name)  # Ada Lovelace

Per quantità maggiori di testo, considera le format string o le f-string, che sono più facili da leggere rispetto a lunghe catene di +.

Ripetizione di Stringhe

L'operatore * ripete una stringa un numero determinato di volte. È utile per generare separatori, spaziature o semplici pattern.

Ripetere una stringa in Python

python— editable, runs on the server

Cambiare la Capitalizzazione

Python fornisce diversi metodi per cambiare la capitalizzazione di una stringa.

MetodoCosa faEsempio input → output
upper()Tutte le lettere maiuscole"hello""HELLO"
lower()Tutte le lettere minuscole"HELLO""hello"
title()Prima lettera di ogni parola maiuscola"hello world""Hello World"
capitalize()Prima lettera maiuscola, resto minuscolo"hELLO""Hello"
swapcase()Scambia maiuscole↔minuscole per ogni lettera"Hello""hELLO"

Convertire una stringa in maiuscolo o minuscolo in Python

python— editable, runs on the server

I metodi per la capitalizzazione sono comunemente usati per confrontare l'input dell'utente indipendentemente da come è stato digitato:

answer = input("Type yes or no: ")
if answer.lower() == "yes":
    print("You said yes!")

Slicing delle Stringhe

Lo slicing estrae una parte di una stringa usando la sintassi [start:stop:step]. Il risultato è una nuova stringa contenente i caratteri dall'indice start fino a — ma non includendo — l'indice stop.

 H  e  l  l  o  ,     W  o  r  l  d  !
 0  1  2  3  4  5  6  7  8  9 10 11 12
-13-12-11-10-9 -8 -7 -6 -5 -4 -3 -2 -1

Eseguire lo slicing delle stringhe in Python

python— editable, runs on the server

Quando Usare gli Indici Negativi

Gli indici negativi contano dalla fine della stringa. L'indice -1 è l'ultimo carattere, -2 è il penultimo, e così via. Questo è comodo quando si vuole ottenere la parte finale di una stringa senza conoscerne la lunghezza:

filename = "report_2024.csv"
extension = filename[-3:]
print(extension)  # csv

Per un approfondimento dedicato, consulta il capitolo Slicing delle Stringhe.

Sostituire Sottostringhe

Il metodo replace(old, new) restituisce una copia della stringa con ogni occorrenza di old sostituita da new. Passa un terzo argomento count per limitare il numero di sostituzioni effettuate.

Sostituire una parte di una stringa in Python

text = "I like cats. Cats are great. Cats!"
print(text.replace("Cats", "Dogs"))         # replaces all occurrences
print(text.replace("Cats", "Dogs", 1))      # replaces first occurrence only
I like cats. Dogs are great. Dogs!
I like cats. Dogs are great. Cats!

Nota che replace() è case-sensitive: "cats" e "Cats" vengono trattate come sottostringhe diverse.

Rimuovere gli Spazi

I caratteri di spazio (spazi, tabulazioni, newline) all'inizio o alla fine di una stringa spesso devono essere rimossi, specialmente quando si elabora l'input dell'utente o si leggono file.

MetodoRimuove gli spazi da
strip()Entrambe le estremità
lstrip()Solo sinistra (inizio)
rstrip()Solo destra (fine)
raw = "   hello world   "
print(repr(raw.strip()))   # 'hello world'
print(repr(raw.lstrip()))  # 'hello world   '
print(repr(raw.rstrip()))  # '   hello world'

Puoi anche rimuovere caratteri specifici passandoli come argomento:

path = "///usr/local/bin///"
print(path.strip("/"))  # usr/local/bin

Suddividere le Stringhe

Il metodo split(sep) suddivide una stringa in corrispondenza di un separatore e restituisce una lista di sottostringhe. Senza argomenti, suddivide su qualsiasi spazio bianco e rimuove le stringhe vuote.

sentence = "Python is easy to learn"
words = sentence.split()
print(words)  # ['Python', 'is', 'easy', 'to', 'learn']

csv_row = "Alice,30,Engineer"
fields = csv_row.split(",")
print(fields)  # ['Alice', '30', 'Engineer']

Passa un secondo argomento maxsplit per limitare il numero di suddivisioni:

data = "one:two:three:four"
print(data.split(":", 2))  # ['one', 'two', 'three:four']

Unire le Stringhe

join() è l'inverso di split(). Combina una lista di stringhe in una sola, inserendo un separatore tra ogni elemento. Il separatore è la stringa su cui si chiama join().

words = ["Python", "is", "fun"]
sentence = " ".join(words)
print(sentence)  # Python is fun

path_parts = ["usr", "local", "bin"]
path = "/".join(path_parts)
print(path)  # usr/local/bin

Usare join() è molto più efficiente che concatenare stringhe in un ciclo, perché ogni + crea un nuovo oggetto stringa. join() alloca la stringa finale una sola volta.

Cercare all'Interno delle Stringhe

Diversi metodi aiutano a trovare del testo all'interno di una stringa.

find() e index()

find(sub) restituisce l'indice della prima occorrenza di sub, oppure -1 se non viene trovata. index(sub) fa la stessa cosa ma solleva ValueError invece di restituire -1.

text = "the quick brown fox"
print(text.find("quick"))   # 4
print(text.find("slow"))    # -1

print(text.index("brown"))  # 10

startswith() e endswith()

Questi restituiscono True o False e sono un'alternativa più pulita allo slicing quando si deve verificare l'inizio o la fine di una stringa.

url = "https://www.w3docs.com"
print(url.startswith("https"))   # True
print(url.endswith(".com"))      # True
print(url.startswith("http://")) # False

Puoi passare una tupla di prefissi/suffissi per verificare più opzioni contemporaneamente:

filename = "photo.jpg"
print(filename.endswith((".jpg", ".jpeg", ".png")))  # True

count()

count(sub) restituisce quante volte sub appare nella stringa (senza sovrapposizioni).

text = "banana"
print(text.count("a"))   # 3
print(text.count("an"))  # 2

Verificare le Proprietà delle Stringhe

Python ha una famiglia di metodi is* che restituiscono True o False riguardo al contenuto di una stringa.

print("hello".isalpha())    # True  – all alphabetic
print("hello123".isalnum()) # True  – all alphanumeric
print("12345".isdigit())    # True  – all digits
print("  ".isspace())       # True  – all whitespace
print("Hello World".istitle()) # True – title-case

Questi sono particolarmente utili per la validazione dell'input.

Esempio Pratico: Pulire l'Input dell'Utente

La modifica delle stringhe nel mondo reale combina spesso diverse tecniche:

raw_input = "  Ada Lovelace  "

# Clean and normalise
name = raw_input.strip()          # remove surrounding spaces
name = name.title()               # ensure proper capitalisation

parts = name.split()              # split into first / last
first, last = parts[0], parts[1]

print(f"First: {first}, Last: {last}")  # First: Ada, Last: Lovelace

Riferimento Rapido

OperazioneSintassiRestituisce
Concatenazionea + bNuova stringa
Ripetiziones * nNuova stringa
Maiuscolos.upper()Nuova stringa
Minuscolos.lower()Nuova stringa
Title cases.title()Nuova stringa
Slices[start:stop:step]Nuova stringa
Sostituziones.replace(old, new)Nuova stringa
Rimozione spazis.strip()Nuova stringa
Suddivisiones.split(sep)Lista
Unionesep.join(iterable)Nuova stringa
Ricercas.find(sub)Indice intero o -1
Conteggios.count(sub)Intero
Inizia cons.startswith(prefix)Boolean
Finisce cons.endswith(suffix)Boolean

Per l'elenco completo dei metodi stringa integrati, consulta Metodi delle Stringhe. Per conoscere le sequenze di escape come \n e \t, consulta Caratteri di Escape. Per la ricerca e la manipolazione avanzata del testo tramite pattern, consulta Python Regex.

Esercitati

Pratica
Which of the following Python string methods or operations return a new string rather than modifying in place?
Which of the following Python string methods or operations return a new string rather than modifying in place?
Was this page helpful?