Pretvaranje popisa nizova (nizova) i popisa brojeva međusobno u Pythonu

Poslovanje

Sljedeći sadržaji, zajedno s primjerom koda, objašnjavaju kako pretvoriti popise (nizove) nizova (str) i popise brojeva (int, float) jedan u drugi u Pythonu.

  • Pretvorite popis brojeva u popis nizova
    • Pretvorite broj u decimalni niz
    • Pretvara numeričke vrijednosti u binarne, oktalne i heksadecimalne nizove
    • Pretvara brojčanu vrijednost u niz u eksponencijalnom zapisu
  • Pretvorite popis nizova u popis brojeva
    • Pretvorite decimalni niz u numerički
    • Pretvara binarne, oktalne i heksadecimalne nizove u brojeve
    • Pretvara nizove u eksponencijalnom zapisu u numeričke vrijednosti
    • Pretvorite samo nizove koji se mogu pretvoriti u brojeve

Kada generirate novi popis iz popisa, shvaćanje popisa je jednostavnije napisati nego za petlje. Primjer koda u ovom članku također koristi razumijevanje popisa. Za pojedinosti o razumijevanju popisa pogledajte sljedeći članak.

Imajte na umu da popisi mogu pohranjivati ​​različite vrste podataka i da se striktno razlikuju od nizova. Koristite niz (standardna biblioteka) ili NumPy u sljedećim slučajevima.

  • Želim rukovati procesima koji zahtijevaju veličinu memorije i memorijske adrese.
  • Želite rukovati nizovima za numeričku obradu velikih skupova podataka itd.

Pretvorite popis brojeva u popis nizova

Pretvorite broj u decimalni niz

Koristite str() za pretvaranje iz numeričkog u niz.

U Pythonu se brojevi mogu izraziti u različitim formatima, uključujući eksponencijalni, heksadecimalni i binarni (heksadecimalni i binarni zapis). str() konverzija rezultira nizom u normalnom decimalnom zapisu.

Ovisno o broju znamenki, eksponencijalni zapis može se koristiti automatski.

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

Pretvara numeričke vrijednosti u binarne, oktalne i heksadecimalne nizove

Za pretvaranje u binarne, oktalne ili heksadecimalne (binarni zapis, oktalni zapis ili heksadecimalni zapis) nizove, dostupne su sljedeće metode.

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

Pomoću funkcije format() moguće je popuniti nule i prilagoditi znamenke.

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

Pretvara brojčanu vrijednost u niz u eksponencijalnom zapisu

Kao što je gore spomenuto, neki slučajevi mogu automatski biti u eksponencijalnom zapisu ovisno o broju znamenki. Međutim, da biste uvijek pretvorili u niz u eksponencijalnom zapisu, upotrijebite jedno od sljedećeg

  • format()
  • str.format()

Za više informacija o funkciji format() i metodi stringa str.format(), pogledajte sljedeći članak.

Može se odrediti broj znamenki dijela mantise. Ako se kao argument koristi veliko slovo E, izlazni niz je također veliko 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']

Pretvorite popis nizova u popis brojeva

Pretvorite decimalni niz u numerički

Koristite int() ili float() za pretvaranje niza u broj.

int() je pretvorba u cijeli broj, a float() je pretvorba u broj s pomičnim zarezom.

U float(), nizovi s izostavljenim cijelim dijelom nadopunjuju se s 0 za cijeli broj.

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]

Pretvara binarne, oktalne i heksadecimalne nizove u brojeve

Drugi argument int() može biti radix: 2 za binarni, 8 za oktalni i 16 za heksadecimalni, pretvarajući niz u broj.

Ako je navedeno 0, svaki od sljedećih nizova s ​​prefiksom pretvara se u cijeli broj.

  • 0b
    • binarne znamenke
  • 0o
    • oktalni
  • 0x
    • heksadecimalni
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]

Pretvara nizove u eksponencijalnom zapisu u numeričke vrijednosti

Nizovi u eksponencijalnom zapisu mogu se izravno pretvoriti pomoću float() bez potrebe za posebnim specifikacijama.

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]

Pretvorite samo nizove koji se mogu pretvoriti u brojeve

Prosljeđivanje niza koji se ne može pretvoriti u broj int() ili float() rezultirat će ValueError.

Ako je definirana nova funkcija koja u slučaju pogreške vraća false, samo elementi koji se mogu pretvoriti mogu se pretvoriti u brojeve i postati elementi popisa.

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