Umbreytir lista yfir strengi (fylki) og lista yfir tölur hver í annan í Python

Viðskipti

Eftirfarandi innihald, ásamt sýnishornskóða, útskýrir hvernig á að umbreyta listum (fylki) af strengjum (str) og lista yfir tölur (int, flot) í hvert annað í Python.

  • Umbreyttu lista yfir tölur í lista yfir strengi
    • Umbreyttu tölu í tugastreng
    • Umbreytir tölugildum í tvöfalda, áttunda og sextánda strengi
    • Breytir talnagildi í streng í veldisvísi
  • Umbreyttu lista yfir strengi í lista yfir tölur
    • Umbreyttu tugastreng í tölustafi
    • Breytir tvöfalda, áttunda og sextánda strengi í tölur
    • Breytir strengjum í veldisvísi í tölugildi
    • Umbreyttu aðeins strengjum sem hægt er að breyta í tölur

Þegar nýr listi er búinn til úr lista er einfaldara að skrifa listaskilning en lykkjur. Dæmiskóðinn í þessari grein notar einnig listaskilning. Fyrir upplýsingar um listaskilning, sjá eftirfarandi grein.

Athugaðu að listar geta geymt mismunandi tegundir gagna og eru algjörlega frábrugðnar fylkjum. Notaðu fylki (venjulegt bókasafn) eða NumPy í eftirfarandi tilvikum.

  • Ég vil höndla ferla sem krefjast minnisstærðar og minnisfönga.
  • Langar að sinna fylki fyrir tölulega úrvinnslu stórra gagnasetta o.fl.

Umbreyttu lista yfir tölur í lista yfir strengi

Umbreyttu tölu í tugastreng

Notaðu str() til að breyta úr tölustafi í streng.

Í Python er hægt að gefa upp tölur á ýmsum sniðum, þar á meðal veldisvísis, sextánda og tvíundar (sextáns og tvíundarmerkis). str() umbreyting leiðir til strengs í venjulegum aukastaf.

Það fer eftir fjölda tölustafa, veldisvísismerki má nota sjálfkrafa.

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

Umbreytir tölugildum í tvöfalda, áttunda og sextánda strengi

Til að umbreyta í tvöfalda, áttunda eða sextánda strengi (tvíundir, áttunda eða sextánda) strengi, eru eftirfarandi aðferðir tiltækar.

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

Með format() fallinu er hægt að fylla út núllin og stilla tölustafina.

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

Breytir talnagildi í streng í veldisvísi

Eins og getið er hér að ofan geta sum tilvik sjálfkrafa verið í veldisvísisnátnun eftir fjölda tölustafa. Hins vegar, til að breyta alltaf í streng í veldisvísisnátnun, notaðu eitt af eftirfarandi

  • format()
  • str.format()

Fyrir frekari upplýsingar um format() fallið og strengjaaðferðina str.format(), sjá eftirfarandi grein.

Hægt er að tilgreina fjölda tölustafa í mantissa hlutanum. Ef hástafur E er notaður sem rökstuðningur er úttaksstrengurinn einnig hástafur 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']

Umbreyttu lista yfir strengi í lista yfir tölur

Umbreyttu tugastreng í tölustafi

Notaðu int() eða float() til að breyta úr streng í tölu.

int() er umbreyting í heiltölu og flot() er umbreyting í fljótandi tölu.

Í float() eru strengir með heiltöluhlutanum sleppt með 0 fyrir heiltöluhlutann.

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]

Breytir tvöfalda, áttunda og sextánda strengi í tölur

Önnur rökin fyrir int() geta verið radix: 2 fyrir tvíundir, 8 fyrir áttund og 16 fyrir sextánda, sem breytir streng í tölu.

Ef 0 er tilgreint er hverjum af eftirfarandi forskeytsstrengjum breytt í heiltölu.

  • 0b
    • tvíundir tölustafir
  • 0o
    • octal
  • 0x
    • sextánskur
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]

Breytir strengjum í veldisvísi í tölugildi

Strengi í veldisvísisnótunum er hægt að breyta beint með float() án þess að þörf sé á sérstökum forskrift.

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]

Umbreyttu aðeins strengjum sem hægt er að breyta í tölur

Að senda streng sem ekki er hægt að breyta í tölu í int() eða float() mun leiða til ValueError.

Ef nýtt fall er skilgreint sem skilar ósatt við villu, er aðeins hægt að umbreyta þáttum sem hægt er að breyta í tölur og verða þættir í listanum.

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]