Conversión de listas de cadenas (arrays) y listas de números entre sí en Python

Negocio

Los siguientes contenidos, junto con un código de ejemplo, explican cómo convertir listas (arrays) de cadenas (str) y listas de números (int, float) entre sí en Python.

  • Convertir una lista de números en una lista de cadenas
    • Convertir un número en una cadena decimal
    • Convierte valores numéricos en cadenas binarias, octales y hexadecimales
    • Convierte un valor numérico en una cadena en notación exponencial
  • Convertir una lista de cadenas en una lista de números
    • Convertir una cadena decimal en numérica
    • Convierte cadenas binarias, octales y hexadecimales en números
    • Convierte cadenas en notación exponencial a valores numéricos
    • Convertir sólo las cadenas que se pueden convertir en números

Cuando se genera una nueva lista a partir de una lista, las comprensiones de lista son más sencillas de escribir que los bucles for. El código de ejemplo de este artículo también utiliza comprensiones de listas. Para más detalles sobre las comprensiones de listas, consulte el siguiente artículo.

Tenga en cuenta que las listas pueden almacenar diferentes tipos de datos y son estrictamente diferentes de los arrays. Utilice array (biblioteca estándar) o NumPy en los siguientes casos.

  • Quiero manejar los procesos que requieren el tamaño de la memoria y las direcciones de memoria.
  • Desea manejar matrices para el procesamiento numérico de grandes conjuntos de datos, etc.

Convertir una lista de números en una lista de cadenas

Convertir un número en una cadena decimal

Utilice str() para convertir de numérico a cadena.

En Python, los números pueden ser expresados en una variedad de formatos, incluyendo exponencial, hexadecimal y binario (notación hexadecimal y binaria). La conversión de str() resulta en una cadena en notación decimal normal.

Dependiendo del número de dígitos, se puede utilizar automáticamente la notación exponencial.

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

Convierte valores numéricos en cadenas binarias, octales y hexadecimales

Para convertir a cadenas binarias, octales o hexadecimales (notación binaria, notación octal o notación hexadecimal), existen los siguientes métodos.

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

Con la función format() es posible rellenar los ceros y ajustar los dígitos.

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

Convierte un valor numérico en una cadena en notación exponencial

Como se ha mencionado anteriormente, algunos casos pueden estar automáticamente en notación exponencial dependiendo del número de dígitos. Sin embargo, para convertir siempre a una cadena en notación exponencial, utilice una de las siguientes opciones

  • format()
  • str.format()

Para más información sobre la función format() y el método de cadena str.format(), consulte el siguiente artículo.

Se puede especificar el número de dígitos de la parte de la mantisa. Si se utiliza una E mayúscula como argumento, la cadena de salida es también una E mayúscula.

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 una lista de cadenas en una lista de números

Convertir una cadena decimal en numérica

Utilice int() o float() para convertir de cadena a número.

int() es una conversión a un número entero, y float() es una conversión a un número de punto flotante.

En float(), las cadenas con la parte entera omitida se complementan con 0 para la parte entera.

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]

Convierte cadenas binarias, octales y hexadecimales en números

El segundo argumento de int() puede ser un radix: 2 para binario, 8 para octal y 16 para hexadecimal, convirtiendo una cadena en un número.

Si se especifica 0, cada una de las siguientes cadenas prefijadas se convierte en un número entero.

  • 0b
    • dígitos binarios
  • 0o
    • octal
  • 0x
    • hexadecimal
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]

Convierte cadenas en notación exponencial a valores numéricos

Las cadenas en notación exponencial pueden convertirse directamente con float() sin necesidad de una especificación especial.

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 sólo las cadenas que se pueden convertir en números

Si se pasa a int() o float() una cadena que no se puede convertir en un número, se producirá un ValueError.

Si se define una nueva función que devuelva false en caso de error, sólo los elementos que puedan ser convertidos podrán ser convertidos en números y convertirse en elementos de la 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]
Copied title and URL