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.
- RELACIONADO:Conversión de formatos en Python, formato (llenado de 0, notación exponencial, hexadecimal, etc.)
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]