Os seguintes contidos, xunto co código de mostra, explican como converter listas (matrices) de cadeas (str) e listas de números (int, float) entre si en Python.
- Converte unha lista de números nunha lista de cadeas
- Converte un número nunha cadea decimal
- Converte valores numéricos en cadeas binarias, octais e hexadecimais
- Converte un valor numérico nunha cadea en notación exponencial
- Converte unha lista de cadeas nunha lista de números
- Converter cadea decimal en numérica
- Converte cadeas binarias, octais e hexadecimais en números
- Converte cadeas en notación exponencial en valores numéricos
- Converte só cadeas que se poden converter en números
Ao xerar unha nova lista a partir dunha lista, as comprensións de listas son máis sinxelas de escribir que para os bucles. O código de mostra deste artigo tamén usa listas de comprensión. Para obter máis información sobre a comprensión das listas, consulte o seguinte artigo.
- RELACIONADO:Como usar as listas de comprensión de Python
Teña en conta que as listas poden almacenar diferentes tipos de datos e son estrictamente diferentes das matrices. Use array (biblioteca estándar) ou NumPy nos seguintes casos.
- Quero xestionar procesos que requiren tamaño de memoria e enderezos de memoria.
- Quere manexar matrices para o procesamento numérico de grandes conxuntos de datos, etc.
Converte unha lista de números nunha lista de cadeas
Converte un número nunha cadea decimal
Use str() para converter de numérico a cadea.
En Python, os números pódense expresar nunha variedade de formatos, incluíndo exponencial, hexadecimal e binario (notación hexadecimal e binaria). A conversión str() dá como resultado unha cadea en notación decimal normal.
Dependendo do número de díxitos, a notación exponencial pódese utilizar automaticamente.
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']
Converte valores numéricos en cadeas binarias, octais e hexadecimais
Para converter a cadeas binarias, octais ou hexadecimales (notación binaria, notación octal ou notación hexadecimal), están dispoñibles os seguintes métodos.
bin()
oct()
hex()
format()
str.format()
Coa función format() é posible encher os ceros e axustar os díxitos.
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']
Converte un valor numérico nunha cadea en notación exponencial
Como se mencionou anteriormente, algúns casos poden estar automaticamente en notación exponencial dependendo do número de díxitos. Non obstante, para converter sempre nunha cadea en notación exponencial, use un dos seguintes
format()
str.format()
Para obter máis información sobre a función format() e o método de cadea str.format(), consulte o seguinte artigo.
- RELACIONADO:Conversión de formato en Python, formato (recheo 0, notación exponencial, hexadecimal, etc.)
Pódese especificar o número de díxitos da parte mantisa. Se se usa unha E maiúscula como argumento, a cadea de saída tamén é unha E maiú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']
Converte unha lista de cadeas nunha lista de números
Converter cadea decimal en numérica
Use int() ou float() para converter de cadea a número.
int() é unha conversión a un número enteiro e float() é unha conversión a un número de coma flotante.
En float(), as cadeas coa parte enteira omitida compleméntanse con 0 para a parte enteira.
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]
Converte cadeas binarias, octais e hexadecimais en números
O segundo argumento de int() pode ser unha base: 2 para binario, 8 para octal e 16 para hexadecimal, convertendo unha cadea nun número.
Se se especifica 0, cada unha das seguintes cadeas prefixadas convértese nun número enteiro.
0b
- díxitos 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]
Converte cadeas en notación exponencial en valores numéricos
As cadeas en notación exponencial pódense converter directamente con float() sen necesidade de especificacións especiais.
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]
Converte só cadeas que se poden converter en números
Pasar unha cadea que non se pode converter nun número a int() ou float() producirá un ValueError.
Se se define unha función nova que devolve false en caso de erro, só os elementos que se poden converter poden converterse en números e converterse en elementos da 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]