Nasledujúci obsah spolu s ukážkovým kódom vysvetľuje, ako navzájom konvertovať zoznamy (polia) reťazcov (str) a zoznamy čísel (int, float) v jazyku Python.
- Prevod zoznamu čísel na zoznam reťazcov
- Prevod čísla na desatinný reťazec
- Konvertuje číselné hodnoty na binárne, oktálové a hexadecimálne reťazce
- Prevedie číselnú hodnotu na reťazec v exponenciálnom zápise
- Prevod zoznamu reťazcov na zoznam čísel
- Previesť desatinný reťazec na číselný
- Konvertuje binárne, oktálne a hexadecimálne reťazce na čísla
- Prevádza reťazce v exponenciálnom zápise na číselné hodnoty
- Konvertovať iba reťazce, ktoré možno konvertovať na čísla
Pri generovaní nového zoznamu zo zoznamu sa zoznam comprehensions píše jednoduchšie ako cykly for. Vzorový kód v tomto článku tiež používa zoznam comprehensions. Podrobnosti o zoznamových comprehensionoch nájdete v nasledujúcom článku.
- SÚVISIACE:Ako používať zoznamy jazyka Python
Všimnite si, že zoznamy môžu uchovávať rôzne typy údajov a striktne sa líšia od polí. V nasledujúcich prípadoch použite pole (štandardná knižnica) alebo NumPy.
- Chcem spracovať procesy, ktoré vyžadujú veľkosť pamäte a adresy pamäte.
- Chcete spracovať polia na numerické spracovanie veľkých súborov údajov atď.
Prevod zoznamu čísel na zoznam reťazcov
Prevod čísla na desatinný reťazec
Na prevod z číselného na reťazcový kód použite funkciu str().
V jazyku Python možno čísla vyjadriť v rôznych formátoch vrátane exponenciálneho, hexadecimálneho a binárneho (hexadecimálny a binárny zápis). výsledkom konverzie str() je reťazec v normálnom desiatkovom zápise.
V závislosti od počtu číslic sa môže automaticky použiť exponenciálny zápis.
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']
Konvertuje číselné hodnoty na binárne, oktálové a hexadecimálne reťazce
Na prevod na binárny, osmičkový alebo šestnástkový (binárny zápis, osmičkový zápis alebo šestnástkový zápis) reťazec sú k dispozícii tieto metódy.
bin()
oct()
hex()
format()
str.format()
Pomocou funkcie format() je možné doplniť nuly a upraviť číslice.
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']
Prevedie číselnú hodnotu na reťazec v exponenciálnom zápise
Ako bolo uvedené vyššie, niektoré prípady môžu byť automaticky v exponenciálnom zápise v závislosti od počtu číslic. Ak však chcete vždy previesť reťazec v exponenciálnom zápise, použite jednu z nasledujúcich možností
format()
str.format()
Viac informácií o funkcii format() a reťazcovej metóde str.format() nájdete v nasledujúcom článku.
Počet číslic mantisy je možné určiť. Ak sa ako argument použije veľké písmeno E, výstupný reťazec je tiež veľké písmeno 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']
Prevod zoznamu reťazcov na zoznam čísel
Previesť desatinný reťazec na číselný
Na prevod z reťazca na číslo použite int() alebo float().
int() je konverzia na celé číslo a float() je konverzia na číslo s pohyblivou rádovou čiarkou.
Pri funkcii float() sa reťazce s vynechanou celočíselnou časťou doplnia hodnotou 0 pre celočíselnú časť.
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]
Konvertuje binárne, oktálne a hexadecimálne reťazce na čísla
Druhým argumentom funkcie int() môže byť radix: 2 pre binárnu sústavu, 8 pre osmičkovú sústavu a 16 pre šestnástkovú sústavu, čím sa reťazec konvertuje na číslo.
Ak je zadaná hodnota 0, každý z nasledujúcich prefixovaných reťazcov sa prevedie na celé číslo.
0b
- binárne číslice
0o
- osmičková sústava
0x
- hexadecimálne
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]
Prevádza reťazce v exponenciálnom zápise na číselné hodnoty
Reťazce v exponenciálnom zápise možno konvertovať priamo pomocou funkcie float() bez potreby špeciálnej špecifikácie.
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]
Konvertovať iba reťazce, ktoré možno konvertovať na čísla
Odovzdanie reťazca, ktorý sa nedá previesť na číslo, funkcii int() alebo float() spôsobí chybu ValueError.
Ak je definovaná nová funkcia, ktorá pri chybe vráti false, iba prvky, ktoré sa dajú previesť, sa môžu previesť na čísla a stať sa prvkami zoznamu.
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]