Menu

Stringhe in Python: f-string, slicing e tutti i metodi che userai

Lavorare con il testo in Python: creare stringhe, usare le f-string, fare slicing e i metodi di tutti i giorni come split, join, replace e strip.

Questa pagina include editor eseguibili: modifica, esegui e vedi subito l'output.

Testo, ma con i metodi

Una stringa Python è una sequenza di caratteri, e userai le stringhe più di qualsiasi altro tipo. Ogni nome, etichetta, messaggio, URL, percorso di file e risposta di un'API prima o poi vive in una stringa.

Ne crei una con le virgolette: singole, doppie o triple:

Virgolette singole e doppie sono intercambiabili. Usa quelle che ti evitano di dover fare l'escape di un carattere. "don't" è pulito; 'don\'t' richiede una barra rovesciata.

Le stringhe sono immutabili. Una volta che una stringa esiste, non puoi cambiarne un carattere sul posto. Ogni operazione che sembra modificare una stringa in realtà ne restituisce una nuova. Per questo scriverai text = text.upper() e non semplicemente text.upper(): senza la riassegnazione, la nuova stringa in maiuscolo verrebbe buttata via.

Unire e ripetere

Due operatori fanno quasi tutto il lavoro di combinazione di stringhe che ti servirà:

+ concatena le stringhe. * ripete una stringa. Entrambi restituiscono una nuova stringa.

Concatenare molti pezzi con + diventa presto brutto. Quando mescoli valori di tipi diversi in un messaggio, usa invece le f-string: le vediamo nella prossima sezione.

f-string: il modo in cui formatterai di solito

Metti una f prima delle virgolette di apertura e la stringa diventa un modello. Tutto ciò che sta in {...} viene sostituito dal valore di quell'espressione:

Dentro le graffe puoi mettere qualsiasi espressione: variabili, operazioni aritmetiche, chiamate di metodi, chiamate di funzioni. Tienile semplici, però; se hai la tentazione di infilare un calcolo di tre righe in {...}, calcolalo prima in una variabile con un nome.

Le f-string supportano anche degli specificatori di formato dopo i due punti, per controllare la formattazione dei numeri, il riempimento e l'allineamento:

Questi specificatori sono gli stessi che usa str.format() e vale la pena darci un'occhiata quando ti senti a tuo agio con le basi. Per il codice dei primi giorni non ti servono.

Slicing: prendere un pezzo

Le stringhe si possono indicizzare come le sequenze. Ogni carattere ha una posizione che parte da zero, e puoi prendere un carattere o un intervallo:

Lo schema [start:stop:step] compare anche nelle liste e nelle altre sequenze, quindi investire qualche minuto per interiorizzarlo ripaga ovunque.

Due cose da sottolineare:

  • L'indice di stop è escluso: word[0:2] include gli indici 0 e 1, non il 2.
  • Gli indici negativi contano dalla fine: -1 è l'ultimo carattere, -2 quello prima, e così via.

Come invertire una stringa

Le stringhe non hanno un metodo .reverse(), perché sono immutabili, ma lo slicing con uno step di -1 fa il lavoro in una riga:

word[::-1] si legge come "dall'inizio alla fine, andando all'indietro di 1". Il risultato è una stringa nuova di zecca; l'originale resta intatto. Se devi scorrere i caratteri al contrario senza creare una nuova stringa, reversed(word) restituisce un iteratore pigro.

Come controllare la lunghezza di una stringa

len(text) restituisce il numero di caratteri:

Nota che len conta i code point Unicode, non i byte. len("café") fa 4, non 5, anche se la codifica UTF-8 occupa più byte: di solito è proprio quello che vuoi.

Come verificare se una stringa contiene una sottostringa

L'operatore in è il controllo idiomatico, e si legge quasi come una frase:

Per controlli che non distinguono maiuscole e minuscole, normalizza prima entrambi i lati:

Se ti serve la posizione, non solo un sì o un no, usa .find(): restituisce l'indice, oppure -1 quando la sottostringa non c'è.

Metodi comuni delle stringhe

Le stringhe hanno decine di metodi. Questa manciata la userai di continuo:

Dividere e unire:

.split(separator) trasforma una stringa in una lista. separator.join(list_of_strings) la rimette insieme. Questi due metodi fanno una parte sproporzionata del lavoro reale sulle stringhe.

Un'altra coppia utile:

È un parser per una voce di configurazione su una riga, scritto in tre righe. Stringhe piccole, grande effetto.

Controllare cosa c'è dentro

Diversi metodi restituiscono booleani, utili nelle condizioni degli if:

Usali con parsimonia: non gestiscono le stranezze di Unicode in tutti i modi che potresti aspettarti. Per qualsiasi cosa vada oltre l'ASCII, affidati al modulo delle regex o al modulo unicodedata.

Fare l'escape dei caratteri speciali

Alcuni caratteri hanno bisogno di una barra rovesciata per comparire dentro una stringa:

Se scrivi percorsi Windows o regex, le raw string ti semplificano la vita. Metti una r prima delle virgolette e le barre rovesciate smettono di essere caratteri di escape:

Le stringhe sono ovunque, quindi tienile leggibili

Tre abitudini che evitano al codice pieno di stringhe di diventare un pasticcio:

  1. Usa le f-string per l'interpolazione. Non concatenare con + valori di tipi diversi.
  2. Riassegna quando "modifichi". text = text.strip(), non text.strip() da solo.
  3. Usa .split() e .join() prima di scrivere cicli manuali per analizzare o comporre testo. Sono più veloci, più chiari e più difficili da sbagliare.

Prossimo argomento: le f-string nel dettaglio, lo strumento di formattazione che hai già visto qualche volta, più gli specificatori per numeri e date che le rendono degne di essere padroneggiate.

Domande frequenti

Cos'è una f-string in Python?

Una f-string è una stringa letterale preceduta da f, in cui tutto ciò che si trova dentro {...} viene sostituito dal valore di quell'espressione. Esempio: f"Hello, {name}!" inserisce nella stringa il valore corrente di name al momento dell'esecuzione.

Come inverto una stringa in Python?

Usa lo slicing con uno step di -1: reversed_text = original[::-1]. Restituisce una nuova stringa fatta degli stessi caratteri in ordine inverso. La stringa originale resta intatta perché in Python le stringhe sono immutabili.

Come divido una stringa in Python?

Chiama .split() sulla stringa. Senza argomenti divide su qualsiasi spazio: "a b c".split() restituisce ['a', 'b', 'c']. Puoi passare un separatore specifico: "a,b,c".split(",") restituisce ['a', 'b', 'c'].

Le stringhe in Python sono modificabili?

No. Le stringhe sono immutabili: una volta che una stringa esiste, non puoi cambiarne nessun carattere sul posto. Ogni metodo che "modifica" una stringa in realtà ne restituisce una nuova. Ecco perché vedi schemi come text = text.strip(): riassegni la variabile alla nuova stringa.

Come concateno le stringhe in Python?

Usa + per unire due stringhe: "hello" + " " + "world". Per inserire un valore in una frase, preferisci una f-string: f"Hello, {name}". Per unire molti pezzi da una lista, usa separator.join(pieces): è più veloce e si legge meglio di una catena di +.

Come controllo la lunghezza di una stringa in Python?

Chiama la funzione integrata len(text). Restituisce il numero di caratteri (code point Unicode), quindi len("café") fa 4. Per la lunghezza in byte, codifica prima: len(text.encode("utf-8")).

Illustrazione dei linguaggi di programmazione di Coddy

Impara a programmare con Coddy

INIZIA