Skip to content

Convertir une liste de chaînes de caractères et une liste de nombres l’une en l’autre en Python

Cet article décrit comment convertir une liste de chaînes (str) et une liste de nombres (int, float) entre elles en Python avec un exemple de code.

  • Convertir une liste de nombres (int, float) en une liste de chaînes (str)
    • Convertir des nombres en chaînes décimales
    • Convertir des nombres en chaînes binaires, octales et hexadécimales
    • Convertir des nombres en chaînes exponentielles
  • Convertir une liste de chaînes (str) en une liste de nombres (int, float)
    • Convertir des chaînes décimales en nombres
    • Convertir des chaînes binaires, octales et hexadécimales en nombres
    • Convertir des chaînes exponentielles en nombres
    • Convertir uniquement les chaînes pouvant être converties en nombres

La compréhension de liste est utile pour générer une nouvelle liste à partir d’une autre liste. L’exemple de code de cet article utilise également les compréhensions de liste. Voir l’article suivant pour plus de détails.

Consultez l’article suivant pour plus de détails sur la conversion de chaînes en nombres.

Convertir une liste de nombres (int, float) en une liste de chaînes (str)

Convertir des nombres en chaînes décimales

Utilisez str() pour convertir un nombre en chaîne.

Les nombres sont convertis en chaînes décimales avec str().

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']

Selon le nombre de chiffres, il peut être automatiquement exprimé en notation exponentielle.

Convertir des nombres en chaînes binaires, octales et hexadécimales

Pour convertir des nombres en chaînes en notation binaire, octale ou hexadécimale, utilisez bin(), oct(), hex() ou format().

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']

Convertir des nombres en chaînes exponentielles

Comme mentionné ci-dessus, certains nombres sont automatiquement convertis en notation exponentielle en fonction du nombre de chiffres. Vous pouvez toujours les convertir en chaînes exponentielles avec format().

Si vous spécifiez E au lieu de e comme argument, la chaîne de sortie sera également E.

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']

Convertir une liste de chaînes (str) en une liste de nombres (int, float)

Convertir des chaînes décimales en nombres

Utilisez int() ou float() pour convertir une chaîne en nombre.

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]

Convertir des chaînes binaires, octales et hexadécimales en nombres

Vous pouvez spécifier la base dans le deuxième argument de int(). Convertit une chaîne en nombre en binaire si le second argument est 2, en octal si 8 ou en hexadécimal si 16.

Si 0 est spécifié comme deuxième argument de int(), les chaînes préfixées par 0b, 0o ou 0x sont converties en nombres entiers sous forme de nombres binaires, octaux ou hexadécimaux, respectivement.

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]

Convertir des chaînes exponentielles en nombres

Les chaînes en notation exponentielle peuvent être converties directement avec float().

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]

Convertir uniquement les chaînes pouvant être converties en nombres

Passer une chaîne qui ne peut pas être convertie en nombre à int() ou float() lève ValueError.

En définissant une fonction qui renvoie False en cas d’erreur, seuls les éléments pouvant être convertis seront convertis en nombres.

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]

Voir l’article suivant pour la gestion des exceptions try … except ….