Merkkijonoluetteloiden (matriisien) ja numeroluetteloiden muuntaminen toisiinsa Pythonissa

liiketoiminta

Seuraavassa sisällössä ja esimerkkikoodissa kerrotaan, miten merkkijonojen (str) ja numeroiden (int, float) luettelot (matriisit) muunnetaan toisiinsa Pythonissa.

  • Muunna numeroiden luettelo merkkijonojen luetteloksi.
    • Numeron muuntaminen desimaalijonoksi
    • Muuntaa numeeriset arvot binääri-, oktaali- ja heksadesimaalijonoiksi.
    • Muuntaa numeerisen arvon merkkijonoksi eksponentiaalisessa merkintätavassa.
  • Muunna merkkijonojen luettelo numeroiden luetteloksi.
    • Muunna desimaalijono numeeriseksi
    • Muuntaa binääri-, oktaali- ja heksadesimaalijonot numeroiksi.
    • Muuntaa merkkijonot eksponentiaalisessa merkintätavassa numeerisiksi arvoiksi.
    • Muunna vain merkkijonot, jotka voidaan muuntaa numeroiksi.

Kun luettelosta luodaan uusi lista, luettelon ymmärtäminen on yksinkertaisempaa kuin for-silmukoiden kirjoittaminen. Tämän artikkelin esimerkkikoodi käyttää myös listakokoelmia. Yksityiskohtaisia tietoja luettelon ymmärtämisestä on seuraavassa artikkelissa.

Huomaa, että luettelot voivat tallentaa erityyppistä dataa ja eroavat selvästi matriiseista. Käytä arraya (standardikirjasto) tai NumPy:tä seuraavissa tapauksissa.

  • Haluan käsitellä prosesseja, jotka vaativat muistin kokoa ja muistiosoitteita.
  • Haluatko käsitellä matriiseja suurten tietokokonaisuuksien numeerista käsittelyä varten jne.

Muunna numeroiden luettelo merkkijonojen luetteloksi.

Numeron muuntaminen desimaalijonoksi

Käytä str()-toimintoa muunnettaessa numeerinen luku merkkijonoksi.

Pythonissa luvut voidaan ilmaista eri muodoissa, kuten eksponentti-, heksadesimaali- ja binäärimuodossa (heksadesimaali- ja binäärimuodossa). str()-muunnoksen tuloksena on merkkijono normaalissa desimaalimuodossa.

Numeroiden lukumäärästä riippuen eksponentiaalista merkintätapaa voidaan käyttää automaattisesti.

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

Muuntaa numeeriset arvot binääri-, oktaali- ja heksadesimaalijonoiksi.

Voit muuntaa merkkijonoja binääri-, oktaali- tai heksadesimaalimerkinnöiksi (binäärimerkintä, oktaalimerkintä tai heksadesimaalimerkintä) seuraavilla menetelmillä.

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

Format()-funktiolla on mahdollista täyttää nollat ja säätää numeroita.

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

Muuntaa numeerisen arvon merkkijonoksi eksponentiaalisessa merkintätavassa.

Kuten edellä mainittiin, joissakin tapauksissa voidaan automaattisesti käyttää eksponentiaalista merkintätapaa numeroiden lukumäärästä riippuen. Jos kuitenkin haluat aina muuntaa merkkijonon eksponentiaaliseen merkintätapaan, käytä jotakin seuraavista tavoista.

  • format()
  • str.format()

Lisätietoja format()-funktiosta ja merkkijonomenetelmästä str.format() on seuraavassa artikkelissa.

Mantissa-osan numeroiden lukumäärä voidaan määrittää. Jos argumenttina käytetään isoa E-kirjainta, tulostusmerkkijono on myös iso E-kirjain.

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

Muunna merkkijonojen luettelo numeroiden luetteloksi.

Muunna desimaalijono numeeriseksi

Käytä int()- tai float()-toimintoa muunnettaessa merkkijono luvuksi.

int() on muunnos kokonaisluvuksi ja float() on muunnos liukuluvuksi.

Float()-funktiossa merkkijonot, joiden kokonaislukuosa on jätetty pois, täydennetään kokonaislukuosan arvolla 0.

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]

Muuntaa binääri-, oktaali- ja heksadesimaalijonot numeroiksi.

int()-olion toinen argumentti voi olla radiksi: 2 binäärille, 8 oktaalille ja 16 heksadesimaalille, jolloin merkkijono muunnetaan numeroksi.

Jos määritetään 0, jokainen seuraavista merkkijonoista muunnetaan kokonaisluvuksi.

  • 0b
    • binääriluvut
  • 0o
    • Octal
  • 0x
    • hexadecimal
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]

Muuntaa merkkijonot eksponentiaalisessa merkintätavassa numeerisiksi arvoiksi.

Eksponentiaalimuodossa olevat merkkijonot voidaan muuntaa suoraan float()-ohjelmalla ilman erityistä määrittelyä.

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]

Muunna vain merkkijonot, jotka voidaan muuntaa numeroiksi.

Jos int()- tai float()-funktioon syötetään merkkijono, jota ei voida muuntaa luvuksi, tuloksena on ValueError.

Jos määritellään uusi funktio, joka palauttaa virheilmoituksen false, vain elementit, jotka voidaan muuntaa, voidaan muuntaa numeroiksi ja niistä tulee listan elementtejä.

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]