HOWTO · Python
Converti una lista di stringhe in numeri interi in Python
Questo tutorial mostra come convertire una lista di stringhe in numeri interi in Python
In questa pagina
Converti le stringhe numeriche con int() per creare una lista di numeri interi. Una comprensione di liste è una scelta concisa; map() e un ciclo for sono alternative utili. Per gli array, NumPy può convertire i valori se la libreria fa già parte del progetto. Gli esempi qui sotto usano gli stessi dati di input. I risultati di esecuzione forniti mostrano che la conversione produce [12, 7, 50, 92].
Convertire una lista di stringhe in numeri interi
Ogni stringa deve rappresentare un numero intero accettato da int(), come "12" o "-4". La conversione crea valori interi, che puoi usare nei calcoli senza dover analizzare di nuovo le stringhe. Scegli una comprensione di liste per una trasformazione semplice, map() per applicare una funzione a ogni elemento di un iterabile oppure un ciclo quando ogni elemento richiede una gestione aggiuntiva.
Usare una comprensione di liste
Una comprensione di liste esprime la conversione e la raccolta dei risultati in un’unica espressione leggibile. Esegui questo esempio:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
values = ["12", "7", "50", "92"]
integers = [int(value) for value in values]
print(integers)
[12, 7, 50, 92]
Questo crea una nuova lista e lascia invariata values. list comprehension è una struttura del linguaggio Python, non un metodo. È una buona scelta predefinita quando ogni elemento di input va convertito e la trasformazione è semplice.
Usare map()
map() applica int() a ogni elemento. In Python 3 restituisce un iteratore: racchiudilo in list() quando il risultato deve essere una lista o va stampato come tale:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
values = ["12", "7", "50", "92"]
integers = list(map(int, values))
print(integers)
[12, 7, 50, 92]
Il comportamento della conversione è lo stesso dell’esempio precedente. Un iteratore può essere utile per elaborare i valori uno alla volta, ma si esaurisce man mano che lo percorri; trasformalo in una lista quando ti serve un risultato riutilizzabile. Per le conversioni comuni, la funzione e la comprensione di liste sono entrambe scelte chiare.
Usare un ciclo for
Un ciclo rende esplicito ogni passaggio ed è comodo quando la conversione richiede una logica per singolo elemento, per esempio per registrare quale valore di origine non è stato convertito. Aggiungi ogni valore convertito a una lista dei risultati:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
values = ["12", "7", "50", "92"]
integers = []
for value in values:
integers.append(int(value))
print(integers)
[12, 7, 50, 92]
Usa questa forma quando una comprensione su una sola riga nasconderebbe passaggi significativi; per una conversione diretta, la comprensione è più breve.
Convertire stringhe con NumPy
Se il progetto usa già NumPy e ti serve un array per i calcoli numerici, converti le stringhe specificando un tipo intero. Questo esempio completo importa NumPy, definisce i dati di input e stampa l’array risultante; NumPy deve essere installato nell’ambiente in cui esegui il codice:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
try:
import numpy as np
except ImportError:
print("Install NumPy to run this example.")
else:
values = ["12", "7", "50", "92"]
integers = np.array(values, dtype=int)
print(integers)
Il risultato è un array di interi NumPy, non una lista Python. Scegli questo approccio quando il resto del lavoro richiede operazioni sugli array NumPy. Prestazioni e memoria dipendono dalle dimensioni dei dati e dal carico di lavoro: misura il tuo caso prima di confrontare la velocità.
Gestire i valori che non possono essere convertiti
Una stringa come "sette" non rappresenta un numero intero, quindi int() genera ValueError. Se l’input può contenere valori di questo tipo, intercetta l’eccezione per ogni conversione e decidi se ignorare il valore, segnalarlo o interrompere l’elaborazione. Per esempio, questa versione raccoglie gli interi validi e registra le stringhe rifiutate:
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
values = ["12", "seven", "50"]
integers = []
rejected = []
for value in values:
try:
integers.append(int(value))
except ValueError:
rejected.append(value)
print(integers)
print(rejected)
[12, 50]
['seven']
Gestisci solo l’errore di conversione previsto: intercettare ValueError lascia visibili gli errori di programmazione non correlati. Se tutti i valori devono essere validi, può essere preferibile lasciare che l’eccezione si propaghi, così l’input errato risulta evidente. Convalida o segnala i valori rifiutati nel punto più adatto alla tua applicazione.
Convertire stringhe decimali e valori misti
int() accetta stringhe nel formato intero, non la notazione decimale come "3.8". Se vuoi troncare la parte frazionaria, converti prima con float() e poi con int():
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
values = ["3.8", "-2.4"]
integers = [int(float(value)) for value in values]
print(integers)
[3, -2]
La conversione a int tronca verso zero; non arrotonda all’intero più vicino. Se devi arrotondare, scegli e applica una regola di arrotondamento esplicita. Considera anche i limiti di precisione quando converti stringhe decimali molto grandi tramite i numeri in virgola mobile.
Se una lista contiene già numeri interi insieme a stringhe numeriche, converti solo i valori che sono stringhe:
values = [12, "7", 50]
integers = [int(value) if isinstance(value, str) else value for value in values]
print(integers)
[12, 7, 50]
Così gli interi esistenti restano interi e le stringhe vengono analizzate. Il controllo non rende sicuri oggetti arbitrari o stringhe malformate: convalida i dati effettivi e gestisci ValueError se possono comparire valori non attendibili. Se la lista contiene già soltanto interi, non serve alcuna conversione.