A következő tartalom, valamint a mintakód ismerteti, hogyan alakíthatók át a karakterláncokból (str) és számokból (int, float) álló listák (tömbök) Pythonban.
- Számok listájának konvertálása karakterláncok listájává
- Egy számot decimális karakterlánccá alakít
- A numerikus értékeket bináris, oktális és hexadecimális karakterláncokká konvertálja.
- Egy numerikus értéket karakterlánccá konvertál exponenciális jelöléssel.
- Sztringek listájának átalakítása számok listájává
- Decimális karakterlánc numerikusra konvertálása
- Bináris, oktális és hexadecimális karakterláncok számokká alakítása
- Az exponenciális jelölésű karakterláncokat numerikus értékekké konvertálja.
- Csak a számokká alakítható karakterláncok konvertálása
Amikor egy listából új listát generálunk, a listakövetelmények egyszerűbben írhatók, mint a for ciklusok. A cikkben szereplő mintakód is listakövetkeztetéseket használ. A listakövetelményekről részletesen a következő cikkben olvashat.
Vegye figyelembe, hogy a listák különböző típusú adatokat tárolhatnak, és szigorúan különböznek a tömböktől. A következő esetekben használjon tömböt (standard könyvtár) vagy NumPy-t.
- Olyan folyamatokat szeretnék kezelni, amelyek memóriaméretet és memóriacímeket igényelnek.
- Tömböket szeretne kezelni nagy adathalmazok numerikus feldolgozásához stb.
Számok listájának konvertálása karakterláncok listájává
Egy számot decimális karakterlánccá alakít
A str() funkcióval numerikusból karakterláncba konvertálhat.
A Pythonban a számok többféle formátumban is kifejezhetők, többek között exponenciális, hexadecimális és bináris (hexadecimális és bináris jelölés) formátumban. str() konverzió eredménye egy normál decimális jelölésű karakterlánc.
A számjegyek számától függően az exponenciális jelölés automatikusan használható.
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']
A numerikus értékeket bináris, oktális és hexadecimális karakterláncokká konvertálja.
A bináris, oktális vagy hexadecimális (bináris jelölés, oktális jelölés vagy hexadecimális jelölés) karakterláncokba való konvertáláshoz a következő módszerek állnak rendelkezésre.
bin()
oct()
hex()
format()
str.format()
A format() függvénnyel lehetőség van a nullák kitöltésére és a számjegyek beállítására.
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']
Egy numerikus értéket karakterlánccá konvertál exponenciális jelöléssel.
Amint fentebb említettük, néhány esetben a számjegyek számától függően automatikusan exponenciális jelölést alkalmazhatunk. Ahhoz azonban, hogy mindig exponenciális jelölésű karakterláncba konvertáljon, használja az alábbiak egyikét
format()
str.format()
A format() függvényről és az str.format() karakterlánc-módszerről bővebben a következő cikkben olvashat.
- KAPCSOLÓDÓ:Formátumkonverzió Pythonban, formátum (0 kitöltés, exponenciális jelölés, hexadecimális, stb.)
A mantissza rész számjegyeinek száma megadható. Ha argumentumként egy nagybetűs E-t használunk, a kimeneti karakterlánc is egy nagybetűs E lesz.
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']
Sztringek listájának átalakítása számok listájává
Decimális karakterlánc numerikusra konvertálása
Használja az int() vagy a float() funkciót a karakterlánc számmá alakításához.
Az int() egy egész számra való átalakítás, a float() pedig egy lebegőpontos számra való átalakítás.
A float()-ban az egész számú részt elhagyó karakterláncok egész számú része 0-val van kiegészítve.
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]
Bináris, oktális és hexadecimális karakterláncok számokká alakítása
Az int() második argumentuma egy radix lehet: 2 bináris, 8 oktális és 16 hexadecimális értékek esetén, a karakterláncot számmá alakítva.
Ha 0 van megadva, a következő előtaggal rendelkező karakterláncok mindegyikét egész számmá alakítja.
0b
- bináris számjegyek
0o
- octal
0x
- hexadecimális
- KAPCSOLÓDÓ:Bináris, oktális és hexadecimális számok és karakterláncok egymáshoz való átalakítása Pythonban
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]
Az exponenciális jelölésű karakterláncokat numerikus értékekké konvertálja.
Az exponenciális jelölésű karakterláncok közvetlenül a float()-val konvertálhatók, külön specifikáció nélkül.
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]
Csak a számokká alakítható karakterláncok konvertálása
Ha olyan karakterláncot adunk át az int() vagy float() függvénynek, amely nem konvertálható számmá, az ValueError-t eredményez.
Ha egy új függvényt definiálunk, amely hiba esetén false-t ad vissza, akkor csak a konvertálható elemek konvertálhatók számokká, és válhatnak a lista elemeivé.
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]