Lijsten van tekenreeksen (arrays) en lijsten van getallen naar elkaar converteren in Python

Bedrijf

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.

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.

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