Převod seznamů řetězců (polí) a seznamů čísel mezi sebou v jazyce Python

Podnikání

Následující obsah spolu s ukázkovým kódem vysvětluje, jak v jazyce Python vzájemně převádět seznamy (pole) řetězců (str) a seznamy čísel (int, float).

  • Převod seznamu čísel na seznam řetězců
    • Převod čísla na desetinný řetězec
    • Převádí číselné hodnoty na binární, oktální a hexadecimální řetězce.
    • Převede číselnou hodnotu na řetězec v exponenciálním zápisu
  • Převod seznamu řetězců na seznam čísel
    • Převod desetinného řetězce na číselný
    • Převádí binární, oktální a hexadecimální řetězce na čísla
    • Převádí řetězce v exponenciální notaci na číselné hodnoty
    • Převést pouze řetězce, které lze převést na čísla

Při generování nového seznamu ze seznamu je zápis seznamů jednodušší než zápis cyklů for. Ukázkový kód v tomto článku také používá seznam comprehensions. Podrobnosti o seznamových comprehenzích najdete v následujícím článku.

Všimněte si, že seznamy mohou uchovávat různé typy dat a striktně se liší od polí. V následujících případech použijte pole (standardní knihovna) nebo NumPy.

  • Chci zpracovávat procesy, které vyžadují velikost paměti a její adresy.
  • Chcete pracovat s poli pro numerické zpracování velkých souborů dat atd.

Převod seznamu čísel na seznam řetězců

Převod čísla na desetinný řetězec

K převodu z čísel na řetězec použijte funkci str().

V jazyce Python lze čísla vyjádřit v různých formátech, včetně exponenciálního, hexadecimálního a binárního (hexadecimální a binární zápis). výsledkem převodu str() je řetězec v normálním desítkovém zápisu.

V závislosti na počtu číslic může být automaticky použit exponenciální zápis.

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

Převádí číselné hodnoty na binární, oktální a hexadecimální řetězce.

Pro převod na binární, oktální nebo hexadecimální (binární zápis, oktální zápis nebo hexadecimální zápis) řetězce jsou k dispozici následující metody.

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

Pomocí funkce format() je možné doplnit nuly a upravit číslice.

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

Převede číselnou hodnotu na řetězec v exponenciálním zápisu

Jak bylo uvedeno výše, některé případy mohou být automaticky v exponenciálním zápisu v závislosti na počtu číslic. Chcete-li však vždy převádět na řetězec v exponenciálním zápisu, použijte jednu z následujících možností

  • format()
  • str.format()

Další informace o funkci format() a řetězcové metodě str.format() najdete v následujícím článku.

Lze zadat počet číslic mantisy. Pokud je jako argument použito velké písmeno E, je výstupním řetězcem rovněž velké písmeno E.

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

Převod seznamu řetězců na seznam čísel

Převod desetinného řetězce na číselný

Pro převod z řetězce na číslo použijte int() nebo float().

int() je převod na celé číslo a float() je převod na číslo s pohyblivou řádovou čárkou.

Při použití funkce float() jsou řetězce s vynechanou celočíselnou částí doplněny hodnotou 0 pro celočíselnou část.

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]

Převádí binární, oktální a hexadecimální řetězce na čísla

Druhým argumentem funkce int() může být radix: 2 pro dvojkovou soustavu, 8 pro osmičkovou soustavu a 16 pro šestnáctkovou soustavu, čímž se řetězec převede na číslo.

Je-li zadána hodnota 0, každý z následujících řetězců s prefixem se převede na celé číslo.

  • 0b
    • binární číslice
  • 0o
    • osmičkové
  • 0x
    • hexadecimální
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]

Převádí řetězce v exponenciální notaci na číselné hodnoty

Řetězce v exponenciálním zápisu lze převádět přímo pomocí funkce float() bez nutnosti speciální specifikace.

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]

Převést pouze řetězce, které lze převést na čísla

Předání řetězce, který nelze převést na číslo, funkci int() nebo float() způsobí chybu ValueError.

Pokud je definována nová funkce, která při chybě vrací false, mohou být pouze prvky, které lze převést, převedeny na čísla a stát se prvky seznamu.

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]