Slicing delle stringhe
Impara lo slicing delle stringhe in Python con sintassi, diagrammi degli indici, valori di passo, indici negativi ed esempi pratici.
Slicing delle stringhe in Python
Lo slicing delle stringhe consente di estrarre una sottostringa da una stringa più grande specificando dove iniziare, dove fermarsi e quanti caratteri saltare alla volta. È una delle operazioni sulle stringhe più comuni in Python e viene usata ovunque, dal parsing dei nomi di file all'inversione delle parole.
Questo capitolo tratta:
- La sintassi
[start:stop:step]e come gli indici corrispondono ai caratteri - Omissione di start o stop (slicing dall'inizio o fino alla fine)
- Indici negativi (conteggio da destra)
- Il parametro step (saltare caratteri, invertire una stringa)
- Errori comuni: indici fuori intervallo, slice vuoti
- Esempi pratici che puoi eseguire immediatamente
Se sei nuovo alle stringhe in Python, leggi prima il capitolo Python Strings — spiega come vengono create e indicizzate le stringhe.
Come funzionano gli indici delle stringhe
Ogni carattere in una stringa Python ha due indici: uno positivo (contando da sinistra, a partire da 0) e uno negativo (contando da destra, a partire da -1).
Per la stringa "Hello, World!":
H e l l o , W o r l d !
0 1 2 3 4 5 6 7 8 9 10 11 12 ← positive
-13 -12 -11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1 ← negativeLa sintassi completa di slicing è:
string[start:stop:step]start— indice del primo carattere da includere (predefinito:0)stop— indice del primo carattere da escludere (predefinito: fine della stringa)step— di quante posizioni avanzare ogni volta (predefinito:1)
L'indice stop è esclusivo — il carattere in posizione stop non viene mai incluso nel risultato.
Slicing di base delle stringhe
Fornisci un indice di inizio e uno di fine separati da due punti per estrarre i caratteri compresi tra di essi.
my_string[0:3] restituisce i caratteri alle posizioni 0, 1 e 2 — il carattere all'indice 3 ('l') non è incluso.
Omissione di start o stop
Ometti start per partire dal primo carattere, oppure ometti stop per continuare fino all'ultimo carattere.
my_string[:] è un idioma comune per copiare una stringa (anche se le stringhe sono immutabili in Python, quindi restituisce semplicemente lo stesso valore).
Indici negativi
Gli indici negativi contano a ritroso dalla fine della stringa. -1 si riferisce all'ultimo carattere, -2 al penultimo, e così via.
Un pattern utile: my_string[-n:] restituisce sempre gli ultimi n caratteri, indipendentemente dalla lunghezza della stringa.
Il parametro step
Il terzo argomento dello slice è il passo. Controlla di quante posizioni Python avanza dopo ogni carattere selezionato.
Inversione di una stringa
Imposta il passo a -1 per iterare da destra a sinistra. Questo è il modo idiomatico per invertire una stringa in Python:
Puoi combinare un passo negativo con indici di inizio e fine. Ricorda: quando il passo è negativo, start deve essere maggiore di stop.
my_string = "Hello, World!"
print(my_string[10:2:-1]) # 'lroW ,ol' — from index 10 down to (not including) index 2Consulta il capitolo Reverse a String per ulteriori tecniche, tra cui reversed() e ''.join().
Combinare start, stop e step
Tutte e tre le parti funzionano insieme. Pensa allo slice come a un ciclo for che inizia da start, si ferma prima di stop e avanza di step.
Indici fuori intervallo
A differenza dell'indicizzazione diretta (che genera un IndexError per un indice fuori intervallo), lo slicing gestisce i valori fuori intervallo in modo sicuro, limitandoli ai confini della stringa.
my_string = "Hello, World!"
# Stop index beyond the string length — no error
print(my_string[7:100]) # 'World!'
# Start index beyond the string length — returns empty string
print(my_string[50:60]) # ''
# Direct index access would raise IndexError:
# print(my_string[100]) # IndexError: string index out of rangeQuesto rende lo slicing sicuro per i pattern "dammi fino a N caratteri" senza dover verificare prima len().
Esempi pratici
Estrarre l'estensione di un file
filename = "report.pdf"
extension = filename[-3:]
print(extension) # 'pdf'Estrarre il dominio da un indirizzo email
email = "[email protected]"
at_index = email.index("@")
domain = email[at_index + 1:]
print(domain) # 'example.com'Troncare una stringa lunga con i puntini di sospensione
def truncate(text, max_length):
if len(text) <= max_length:
return text
return text[:max_length - 3] + "..."
print(truncate("Hello, World!", 8)) # 'Hello...'
print(truncate("Hi", 8)) # 'Hi'Verificare se una stringa è un palindromo
word = "racecar"
is_palindrome = word == word[::-1]
print(is_palindrome) # TrueRiferimento rapido
| Espressione | Significato |
|---|---|
s[a:b] | Caratteri dall'indice a fino a (escluso) b |
s[:b] | Dall'inizio fino a (escluso) b |
s[a:] | Dall'indice a fino alla fine |
s[:] | Copia completa |
s[a:b:n] | Ogni n-esimo carattere da a a b |
s[::-1] | Stringa invertita |
s[-n:] | Ultimi n caratteri |
s[:-n] | Tutto tranne gli ultimi n caratteri |
Cosa leggere dopo
- Python Strings — creazione, indicizzazione e immutabilità delle stringhe
- String Methods —
upper(),strip(),split(),replace()e altro - Modify Strings — tecniche per trasformare il contenuto delle stringhe
- Concatenate Strings — unire stringhe con
+ejoin() - Escape Characters —
\n,\t,\\e altre sequenze speciali - Format Strings — incorporare valori nelle stringhe con f-string e
.format()