Pretvarjanje seznamov nizov (nizov) in seznamov števil med seboj v Pythonu

Posel

Naslednja vsebina skupaj z vzorčno kodo pojasnjuje, kako v Pythonu med seboj pretvoriti sezname (polja) nizov (str) in sezname števil (int, float).

  • Pretvarjanje seznama številk v seznam nizov
    • Pretvarjanje števila v decimalni niz
    • Pretvarjanje številskih vrednosti v binarne, oktalne in heksadecimalne nize
    • pretvori številsko vrednost v niz v eksponentnem zapisu
  • Pretvarjanje seznama nizov v seznam številk
    • Pretvarjanje decimalnega niza v številski niz
    • pretvori binarne, oktalne in heksadecimalne nize v števila
    • Pretvarja nize v eksponentnem zapisu v numerične vrednosti
    • Pretvarjanje samo nizov, ki jih je mogoče pretvoriti v številke

Pri ustvarjanju novega seznama iz seznama je razumevanje seznamov preprostejše za pisanje kot zanke for. Vzorčna koda v tem članku prav tako uporablja razumevanje seznamov. Za podrobnosti o razumevanju seznamov glejte naslednji članek.

Upoštevajte, da lahko seznami shranjujejo različne vrste podatkov in da se bistveno razlikujejo od polj. V naslednjih primerih uporabite array (standardna knjižnica) ali NumPy.

  • Želim obdelati procese, ki zahtevajo velikost pomnilnika in pomnilniške naslove.
  • Želite ravnati z matrikami za numerično obdelavo velikih podatkovnih nizov itd.

Pretvarjanje seznama številk v seznam nizov

Pretvarjanje števila v decimalni niz

Uporabite funkcijo str() za pretvorbo iz števila v niz.

V Pythonu lahko števila izrazimo v različnih oblikah, vključno z eksponentno, šestnajstiško in binarno (šestnajstiški in binarni zapis). pretvorba str() ustvari niz v običajnem decimalnem zapisu.

Glede na število številk se lahko samodejno uporabi eksponentni zapis.

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

Pretvarjanje številskih vrednosti v binarne, oktalne in heksadecimalne nize

Za pretvorbo v binarne, oktalne ali heksadecimalne nize (binarni zapis, oktalni zapis ali heksadecimalni zapis) so na voljo naslednje metode.

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

S funkcijo format() je mogoče dopolniti ničle in prilagoditi številke.

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

pretvori številsko vrednost v niz v eksponentnem zapisu

Kot je bilo omenjeno zgoraj, so lahko nekateri primeri samodejno v eksponentnem zapisu, odvisno od števila številk. Če pa želite niz vedno pretvoriti v eksponentni zapis, uporabite eno od naslednjih možnosti

  • format()
  • str.format()

Za več informacij o funkciji format() in metodi string str.format() glejte naslednji članek.

Določite lahko število števk mantisnega dela. Če je kot argument uporabljena velika črka E, je tudi izhodni niz velika črka 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']

Pretvarjanje seznama nizov v seznam številk

Pretvarjanje decimalnega niza v številski niz

Za pretvorbo iz niza v število uporabite int() ali float().

int() je pretvorba v celo število, float() pa je pretvorba v število s plavajočo vejico.

V funkciji float() se nizi z izpuščenim celoštevilskim delom dopolnijo z 0 za celoštevilski del.

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]

pretvori binarne, oktalne in heksadecimalne nize v števila

Drugi argument funkcije int() je lahko radix: Pri tem se niz pretvori v število.

Če je navedena vrednost 0, se vsak od naslednjih predponskih nizov pretvori v celo število.

  • 0b
    • binarne številke
  • 0o
    • osmica
  • 0x
    • heksadecimalno
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]

Pretvarja nize v eksponentnem zapisu v numerične vrednosti

Nizi v eksponentnem zapisu se lahko pretvorijo neposredno s funkcijo float(), ne da bi bila potrebna posebna specifikacija.

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]

Pretvarjanje samo nizov, ki jih je mogoče pretvoriti v številke

Če int() ali float() posredujete niz, ki ga ni mogoče pretvoriti v število, se pojavi napaka ValueError.

Če je definirana nova funkcija, ki ob napaki vrne false, se lahko samo elementi, ki jih je mogoče pretvoriti, pretvorijo v števila in postanejo elementi seznama.

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]