Stringide loetelude (massiivid) ja numbrite loetelude teisendamine üksteiseks Pythonis

Äri

Järgnev sisu koos näidiskoodiga selgitab, kuidas teisendada stringide (str) ja numbrite (int, float) loendeid (massiivid) üksteiseks Pythonis.

  • Numbrite loendi teisendamine stringide loendiks
    • Numbrite teisendamine kümnendsõna
    • Teisendab numbrilised väärtused binaarseteks, kaheksakohalisteks ja kuuekohalisteks stringideks.
    • Teisendab numbrilise väärtuse stringiks eksponentsiaalses märkimisviisis.
  • Teisenda stringide loetelu numbrite loeteluks
    • Teisenda kümnendsüsteemi string numbriliseks
    • Teisendab binaar-, oktaal- ja heksadekaalseid jadasid numbriteks.
    • Teisendab stringid eksponentsiaalses märkimisviisis arvväärtusteks.
    • Teisenda ainult stringid, mida saab teisendada numbriteks.

Kui loendist genereeritakse uus nimekiri, on loendikäsitlusi lihtsam kirjutada kui for-silmuseid. Selles artiklis esitatud näidiskoodis kasutatakse samuti loendikäsitlusi. Üksikasjalikumat teavet loendi mõistmise kohta leiate järgmisest artiklist.

Pange tähele, et loendid võivad salvestada eri tüüpi andmeid ja erinevad rangelt massiividest. Kasutage massiive (standardraamatukogu) või NumPy-d järgmistel juhtudel.

  • Ma tahan käsitleda protsesse, mis nõuavad mälu suurust ja mäluaadresse.
  • Tahad käsitseda massiive suurte andmekogumite numbriliseks töötlemiseks jne.

Numbrite loendi teisendamine stringide loendiks

Numbrite teisendamine kümnendsõna

Kasutage str(), et teisendada numbriline väärtus stringiks.

Pythonis saab numbreid väljendada mitmesugustes vormingutes, sealhulgas eksponent-, heksadekaal- ja binaarvormingus (heksadekaal- ja binaarvormingus). str() teisendus annab tulemuseks stringi tavalises kümnendsüsteemis.

Sõltuvalt numbrite arvust võidakse automaatselt kasutada eksponentsiaalset märkimist.

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

Teisendab numbrilised väärtused binaarseteks, kaheksakohalisteks ja kuuekohalisteks stringideks.

Binaarseks, oktaalseks või heksadetsimaalseks (binaarses, oktaalses või heksadetsimaalses märkimisviisis) stringide teisendamiseks on saadaval järgmised meetodid.

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

Funktsiooniga format() on võimalik täita nullid ja kohandada numbreid.

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

Teisendab numbrilise väärtuse stringiks eksponentsiaalses märkimisviisis.

Nagu eespool mainitud, võivad mõned juhtumid olla automaatselt eksponentsiaalses märkimisviisis, sõltuvalt numbrite arvust. Kui soovite siiski alati teisendada stringi eksponentsiaalsesse märkimisviisi, kasutage ühte järgmistest võimalustest.

  • format()
  • str.format()

Lisateavet funktsiooni format() ja stringi meetodi str.format() kohta leiate järgmisest artiklist.

Võib määrata mantissa osa numbrite arvu. Kui argumendina kasutatakse suurt E-d, on väljundjada samuti suur 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']

Teisenda stringide loetelu numbrite loeteluks

Teisenda kümnendsüsteemi string numbriliseks

Kasutage int() või float(), et teisendada stringist arvuks.

int() on muundamine täisarvuks ja float() on muundamine ujukomaarvuks.

Float() funktsioonis täiendatakse stringid, mille täisarvuline osa on välja jäetud, täisarvulise osa jaoks 0-ga.

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]

Teisendab binaar-, oktaal- ja heksadekaalseid jadasid numbriteks.

Int() teine argument võib olla radix: 2 binaarsüsteemi puhul, 8 oktaalsüsteemi puhul ja 16 kuueteistkümnendsüsteemi puhul, teisendades stringi arvuks.

Kui on määratud 0, teisendatakse kõik järgmised eelkirjajad täisarvuks.

  • 0b
    • binaarsed numbrid
  • 0o
    • Octal
  • 0x
    • heksadetsimaalne
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]

Teisendab stringid eksponentsiaalses märkimisviisis arvväärtusteks.

Eksponentsiaalses märkimisviisis stringid saab konverteerida otse funktsiooniga float(), ilma et oleks vaja spetsiaalset spetsifikatsiooni.

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]

Teisenda ainult stringid, mida saab teisendada numbriteks.

Kui int() või float() funktsioonile edastatakse string, mida ei saa teisendada arvuks, tekib ValueError.

Kui defineeritakse uus funktsioon, mis tagastab vea korral false, saab ainult teisendatavad elemendid teisendada numbriteks ja muuta need loendi elementideks.

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]