Convertire liste di stringhe (array) e liste di numeri tra loro in Python

Attività commerciale

I seguenti contenuti, insieme al codice di esempio, spiegano come convertire liste (array) di stringhe (str) e liste di numeri (int, float) tra loro in Python.

  • Convertire un elenco di numeri in un elenco di stringhe
    • Convertire un numero in una stringa decimale
    • Converte valori numerici in stringhe binarie, ottali ed esadecimali
    • Converte un valore numerico in una stringa in notazione esponenziale
  • Convertire un elenco di stringhe in un elenco di numeri
    • Convertire stringa decimale in numerico
    • Converte stringhe binarie, ottali ed esadecimali in numeri
    • Converte stringhe in notazione esponenziale in valori numerici
    • Convertire solo le stringhe che possono essere convertite in numeri

Quando si genera una nuova lista da una lista, le list comprehensions sono più semplici da scrivere rispetto ai cicli for. Il codice di esempio in questo articolo usa anche le estensioni di lista. Per i dettagli sulla comprensione delle liste, vedere il seguente articolo.

Notate che le liste possono memorizzare diversi tipi di dati e sono strettamente diverse dagli array. Usate array (libreria standard) o NumPy nei seguenti casi.

  • Voglio gestire i processi che richiedono dimensioni e indirizzi di memoria.
  • Volete gestire gli array per l'elaborazione numerica di grandi insiemi di dati, ecc.

Convertire un elenco di numeri in un elenco di stringhe

Convertire un numero in una stringa decimale

Usate str() per convertire da numerico a stringa.

In Python, i numeri possono essere espressi in una varietà di formati, tra cui esponenziale, esadecimale e binario (notazione esadecimale e binaria). La conversione str() risulta in una stringa in normale notazione decimale.

A seconda del numero di cifre, la notazione esponenziale può essere usata automaticamente.

l_n = [-0.5, 0, 1.0, 100, 1.2e-2, 0xff, 0b11]

l_n_str = [str(n) for n in l_n]
print(l_n_str)
# ['-0.5', '0', '1.0', '100', '0.012', '255', '3']

Converte valori numerici in stringhe binarie, ottali ed esadecimali

Per convertire in stringhe binarie, ottali o esadecimali (notazione binaria, notazione ottale o esadecimale), sono disponibili i seguenti metodi.

  • bin()
  • oct()
  • hex()
  • format()
  • str.format()

Con la funzione format(), è possibile riempire gli zeri e regolare le cifre.

l_i = [0, 64, 128, 192, 256]

l_i_hex1 = [hex(i) for i in l_i]
print(l_i_hex1)
# ['0x0', '0x40', '0x80', '0xc0', '0x100']

l_i_hex2 = [format(i, '04x') for i in l_i]
print(l_i_hex2)
# ['0000', '0040', '0080', '00c0', '0100']

l_i_hex3 = [format(i, '#06x') for i in l_i]
print(l_i_hex3)
# ['0x0000', '0x0040', '0x0080', '0x00c0', '0x0100']

Converte un valore numerico in una stringa in notazione esponenziale

Come detto sopra, alcuni casi possono essere automaticamente in notazione esponenziale a seconda del numero di cifre. Tuttavia, per convertire sempre in una stringa in notazione esponenziale, usate uno dei seguenti

  • format()
  • str.format()

Per maggiori informazioni sulla funzione format() e sul metodo str.format(), vedi il seguente articolo.

Il numero di cifre della parte mantissa può essere specificato. Se una E maiuscola è usata come argomento, la stringa in uscita è anch'essa una E maiuscola.

l_f = [0.0001, 123.456, 123400000]

l_f_e1 = [format(f, 'e') for f in l_f]
print(l_f_e1)
# ['1.000000e-04', '1.234560e+02', '1.234000e+08']

l_f_e2 = [format(f, '.3E') for f in l_f]
print(l_f_e2)
# ['1.000E-04', '1.235E+02', '1.234E+08']

Convertire un elenco di stringhe in un elenco di numeri

Convertire stringa decimale in numerico

Usa int() o float() per convertire da stringa a numero.

int() è una conversione in un numero intero, e float() è una conversione in un numero in virgola mobile.

In float(), le stringhe con la parte intera omessa sono completate con 0 per la parte intera.

l_si = ['-10', '0', '100']

l_si_i = [int(s) for s in l_si]
print(l_si_i)
# [-10, 0, 100]

l_sf = ['.123', '1.23', '123']

l_sf_f = [float(s) for s in l_sf]
print(l_sf_f)
# [0.123, 1.23, 123.0]

Converte stringhe binarie, ottali ed esadecimali in numeri

Il secondo argomento di int() può essere un radix: 2 per il binario, 8 per l'ottale e 16 per l'esadecimale, convertendo una stringa in un numero.

Se viene specificato 0, ciascuna delle seguenti stringhe prefissate viene convertita in un intero.

  • 0b
    • cifre binarie
  • 0o
    • ottale
  • 0x
    • esadecimale
l_sb = ['0011', '0101', '1111']

l_sb_i = [int(s, 2) for s in l_sb]
print(l_sb_i)
# [3, 5, 15]

l_sbox = ['100', '0b100', '0o77', '0xff']

l_sbox_i = [int(s, 0) for s in l_sbox]
print(l_sbox_i)
# [100, 4, 63, 255]

Converte stringhe in notazione esponenziale in valori numerici

Le stringhe in notazione esponenziale possono essere convertite direttamente con float() senza bisogno di specifiche speciali.

l_se = ['1.23e3', '0.123e-1', '123']

l_se_f = [float(s) for s in l_se]
print(l_se_f)
# [1230.0, 0.0123, 123.0]

Convertire solo le stringhe che possono essere convertite in numeri

Passare una stringa che non può essere convertita in un numero a int() o float() risulterà in un ValueError.

Se si definisce una nuova funzione che restituisce false su errore, solo gli elementi che possono essere convertiti possono essere convertiti in numeri e diventare elementi della lista.

def is_int(s):
    try:
        int(s)
    except ValueError:
        return False
    else:
        return True

def is_float(s):
    try:
        float(s)
    except ValueError:
        return False
    else:
        return True

l_multi = ['-100', '100', '1.23', '1.23e2', 'one']

l_multi_i = [int(s) for s in l_multi if is_int(s)]
print(l_multi_i)
# [-100, 100]

l_multi_f = [float(s) for s in l_multi if is_float(s)]
print(l_multi_f)
# [-100.0, 100.0, 1.23, 123.0]