Converter listas de cadeas (matrices) e listas de números entre si en Python

Negocios

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.

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.

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