Cet article explique comment convertir une liste de chaînes ( 𝐬𝐭𝐫 ) et une liste de nombres ( 𝐢𝐧𝐭 , 𝐟𝐥𝐨𝐚𝐭 ) l’une vers l’autre en Python.
Les compréhensions de liste, qui sont utiles pour créer de nouvelles listes à partir de listes existantes, sont utilisées dans l’exemple de code de cet article. Consultez l’article suivant pour plus de détails sur les compréhensions de liste.
Consultez l’article suivant pour plus de détails sur la conversion de chaînes en nombres.
Convertir une liste de nombres ( 𝐢𝐧𝐭 , 𝐟𝐥𝐨𝐚𝐭 ) en une liste de chaînes ( 𝐬𝐭𝐫 )
Convertir des nombres en chaînes décimales
La fonction 𝐬𝐭𝐫() est utilisée pour convertir des nombres en chaînes décimales.
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']
Notez que les nombres peuvent être automatiquement exprimés en notation exponentielle en fonction du nombre de chiffres.
Convertir des nombres en chaînes binaires, octales et hexadécimales
Pour convertir des nombres en chaînes binaires, octales ou hexadécimales, utilisez 𝐛𝐢𝐧() , 𝐨𝐜𝐭() , 𝐡𝐞𝐱() ou 𝐟𝐨𝐫𝐦𝐚𝐭() .
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é précédemment, certains nombres peuvent être automatiquement représentés en notation exponentielle, en fonction de leur nombre de chiffres. La fonction 𝐟𝐨𝐫𝐦𝐚𝐭() permet une conversion explicite en chaînes exponentielles.
Pour plus de détails sur 𝐟𝐨𝐫𝐦𝐚𝐭() et 𝐬𝐭𝐫.𝐟𝐨𝐫𝐦𝐚𝐭() , y compris les chaînes de spécification de format, consultez l’article suivant.
Si vous spécifiez E au lieu de 𝐞 comme argument, la chaîne de sortie inclura é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 ( 𝐬𝐭𝐫 ) en une liste de nombres ( 𝐢𝐧𝐭 , 𝐟𝐥𝐨𝐚𝐭 )
Convertir des chaînes décimales en nombres
Utilisez 𝐢𝐧𝐭() ou 𝐟𝐥𝐨𝐚𝐭() 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
La fonction 𝐢𝐧𝐭() accepte une base comme deuxième argument. Elle traite les chaînes comme des nombres binaires, octaux ou hexadécimaux si le deuxième argument est 2 , 8 ou 16 .
Si 0 est passé comme deuxième argument à 𝐢𝐧𝐭() , les chaînes préfixées par 0𝐛 , 0𝐨 ou 0𝐱 ( 0B , 0O ou 0X ) sont reconnues comme des nombres binaires, octaux ou hexadécimaux.
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 𝐟𝐥𝐨𝐚𝐭() .
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 convertibles en nombres
La tentative de conversion d’une chaîne non convertible en nombre avec 𝐢𝐧𝐭() ou 𝐟𝐥𝐨𝐚𝐭() génère une erreur V𝐚𝐥𝐮𝐞E𝐫𝐫𝐨𝐫 . Pour éviter cela, définissez une fonction qui renvoie F𝐚𝐥𝐬𝐞 lorsqu’une erreur se produit. De cette façon, seuls les éléments convertibles 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]
Reportez-vous à l’article suivant pour en savoir plus sur la gestion des exceptions.
