W3docs

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  ← negative

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

python— editable, runs on the server

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.

python— editable, runs on the server

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.

python— editable, runs on the server

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.

python— editable, runs on the server

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:

python— editable, runs on the server

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 2

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

python— editable, runs on the server
python— editable, runs on the server

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 range

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

Riferimento rapido

EspressioneSignificato
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

Esercitazione

Pratica
Cosa restituisce lo slice `s[2:5]` per la stringa `'Python'`?
Cosa restituisce lo slice `s[2:5]` per la stringa `'Python'`?
Was this page helpful?