De volgende inhoud, samen met voorbeeldcode, legt uit hoe je lijsten (arrays) van tekenreeksen (str) en lijsten van getallen (int, float) naar elkaar converteert in Python.
- Converteer een lijst van getallen naar een lijst van strings
- Zet een getal om in een decimale string
- Converteert numerieke waarden naar binaire, octale en hexadecimale strings
- Converteert een numerieke waarde naar een string in exponentiële notatie
- Converteer een lijst van tekenreeksen naar een lijst van getallen
- Zet decimale string om in numeriek
- Converteert binaire, octale en hexadecimale strings naar getallen
- Converteert tekenreeksen in exponentiële notatie naar numerieke waarden
- Converteer alleen tekenreeksen die in getallen kunnen worden omgezet
Bij het genereren van een nieuwe lijst uit een lijst, zijn list comprehensions eenvoudiger te schrijven dan for loops. De voorbeeldcode in dit artikel gebruikt ook list comprehensions. Voor meer details over list comprehensions, zie het volgende artikel.
- GERELATEERD:Hoe Python lijst comprehensies te gebruiken
Merk op dat lijsten verschillende types van gegevens kunnen opslaan en strikt verschillend zijn van arrays. Gebruik array (standaardbibliotheek) of NumPy in de volgende gevallen.
- Ik wil processen afhandelen die geheugengrootte en geheugenadressen nodig hebben.
- Wil je omgaan met arrays voor numerieke verwerking van grote gegevensverzamelingen, enz.
Converteer een lijst van getallen naar een lijst van strings
Zet een getal om in een decimale string
Gebruik str() om van numeriek naar string te converteren.
In Python kunnen getallen in verschillende formaten worden uitgedrukt, waaronder exponentieel, hexadecimaal en binair (hexadecimale en binaire notatie). str() conversie resulteert in een string in normale decimale notatie.
Afhankelijk van het aantal cijfers kan automatisch de exponentiële notatie worden gebruikt.
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']
Converteert numerieke waarden naar binaire, octale en hexadecimale strings
Om te converteren naar binaire, octale of hexadecimale (binaire notatie, octale notatie, of hexadecimale notatie) tekenreeksen, zijn de volgende methoden beschikbaar.
bin()
oct()
hex()
format()
str.format()
Met de format() functie is het mogelijk om de nullen in te vullen en de cijfers aan te passen.
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']
Converteert een numerieke waarde naar een string in exponentiële notatie
Zoals hierboven vermeld, kunnen sommige gevallen automatisch in exponentiële notatie staan, afhankelijk van het aantal cijfers. Om echter altijd naar een string in exponentiële notatie te converteren, gebruikt u een van de volgende mogelijkheden
format()
str.format()
Voor meer informatie over de format() functie en de string methode str.format(), zie het volgende artikel.
- GERELATEERD:Formaat conversie in Python, formaat (0-vulling, exponentiële notatie, hexadecimaal, etc.)
Het aantal cijfers van het mantisse-deel kan worden opgegeven. Als een hoofdletter E als argument wordt gebruikt, is de uitvoerstring ook een hoofdletter 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']
Converteer een lijst van tekenreeksen naar een lijst van getallen
Zet decimale string om in numeriek
Gebruik int() of float() om van string naar getal te converteren.
int() is een conversie naar een geheel getal, en float() is een conversie naar een drijvend-kommagetal.
In float() worden strings waarvan het gehele getaldeel is weggelaten, aangevuld met 0 voor het gehele getaldeel.
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]
Converteert binaire, octale en hexadecimale strings naar getallen
Het tweede argument van int() kan een radix zijn: 2 voor binair, 8 voor octaal, en 16 voor hexadecimaal, waarbij een string in een getal wordt omgezet.
Als 0 is gespecificeerd, wordt elk van de volgende strings geconverteerd naar een geheel getal.
0b
- binaire cijfers
0o
- octaal
0x
- hexadecimaal
- GERELATEERD:Converteer binaire, octale en hexadecimale getallen en tekenreeksen naar elkaar in Python
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]
Converteert tekenreeksen in exponentiële notatie naar numerieke waarden
Strings in exponentiële notatie kunnen direct worden geconverteerd met float() zonder dat speciale specificatie nodig is.
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]
Converteer alleen tekenreeksen die in getallen kunnen worden omgezet
Het doorgeven van een string aan int() of float() die niet naar een getal kan worden geconverteerd, zal resulteren in een ValueError.
Indien een nieuwe functie wordt gedefinieerd die false op fout teruggeeft, kunnen alleen elementen die kunnen worden geconverteerd, worden geconverteerd naar getallen en elementen van de lijst worden.
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]