Conversion de listes de chaînes de caractères (tableaux) et de listes de nombres entre elles en Python

Affaires

Le contenu suivant, accompagné d'un exemple de code, explique comment convertir des listes (tableaux) de chaînes de caractères (str) et des listes de nombres (int, float) entre elles en Python.

  • Convertissez une liste de nombres en une liste de chaînes de caractères.
    • Convertir un nombre en chaîne décimale
    • Convertit les valeurs numériques en chaînes binaires, octales et hexadécimales.
    • Convertit une valeur numérique en une chaîne de caractères en notation exponentielle.
  • Convertir une liste de chaînes de caractères en une liste de nombres
    • Convertir une chaîne décimale en numérique
    • Convertit les chaînes binaires, octales et hexadécimales en nombres.
    • Convertit les chaînes de caractères en notation exponentielle en valeurs numériques
    • Convertir uniquement les chaînes de caractères qui peuvent être converties en nombres

Lorsqu'il s'agit de générer une nouvelle liste à partir d'une liste, les comprehensions de liste sont plus simples à écrire que les boucles for. L'exemple de code de cet article utilise également des compréhensions de listes. Pour plus de détails sur les compréhensions de listes, voir l'article suivant.

Notez que les listes peuvent stocker différents types de données et sont strictement différentes des tableaux. Utilisez array (bibliothèque standard) ou NumPy dans les cas suivants.

  • Je veux gérer les processus qui nécessitent une taille de mémoire et des adresses de mémoire.
  • Vous voulez manipuler des tableaux pour le traitement numérique de grands ensembles de données, etc.

Convertissez une liste de nombres en une liste de chaînes de caractères.

Convertir un nombre en chaîne décimale

Utilisez str() pour convertir les données numériques en chaînes de caractères.

En Python, les nombres peuvent être exprimés dans divers formats, notamment en notation exponentielle, hexadécimale et binaire (notation hexadécimale et binaire). La conversion str() donne une chaîne en notation décimale normale.

En fonction du nombre de chiffres, la notation exponentielle peut être utilisée automatiquement.

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

Convertit les valeurs numériques en chaînes binaires, octales et hexadécimales.

Pour convertir des chaînes de caractères en binaire, octal ou hexadécimal (notation binaire, notation octale ou notation hexadécimale), les méthodes suivantes sont disponibles.

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

Avec la fonction format(), il est possible de remplir les zéros et d'ajuster les chiffres.

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

Convertit une valeur numérique en une chaîne de caractères en notation exponentielle.

Comme mentionné ci-dessus, certains cas peuvent être automatiquement en notation exponentielle en fonction du nombre de chiffres. Toutefois, pour toujours convertir une chaîne en notation exponentielle, utilisez l'une des méthodes suivantes

  • format()
  • str.format()

Pour plus d'informations sur la fonction format() et la méthode string str.format(), consultez l'article suivant.

Le nombre de chiffres de la partie mantisse peut être spécifié. Si un E majuscule est utilisé comme argument, la chaîne de sortie est également un E majuscule.

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 de caractères en une liste de nombres

Convertir une chaîne décimale en numérique

Utilisez int() ou float() pour convertir une chaîne de caractères en nombre.

int() est une conversion vers un nombre entier, et float() est une conversion vers un nombre à virgule flottante.

Dans float(), les chaînes de caractères dont la partie entière est omise sont complétées par 0 pour la partie entière.

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]

Convertit les chaînes binaires, octales et hexadécimales en nombres.

Le second argument de int() peut être un radix : 2 pour le binaire, 8 pour l'octal et 16 pour l'hexadécimal, convertissant ainsi une chaîne de caractères en un nombre.

Si 0 est spécifié, chacune des chaînes préfixées suivantes est convertie en un nombre entier.

  • 0b
    • chiffres binaires
  • 0o
    • octal
  • 0x
    • hexadécimal
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]

Convertit les chaînes de caractères en notation exponentielle en valeurs numériques

Les chaînes de caractères en notation exponentielle peuvent être converties directement avec float() sans nécessiter de spécification particulière.

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 de caractères qui peuvent être converties en nombres

Le passage d'une chaîne de caractères qui ne peut pas être convertie en un nombre à int() ou float() entraînera une ValueError.

Si l'on définit une nouvelle fonction qui renvoie false en cas d'erreur, seuls les éléments qui peuvent être convertis peuvent être convertis en nombres et devenir des éléments de la liste.

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]
Copied title and URL