Konvertera listor med strängar (matriser) och listor med siffror till varandra i Python

Företag

Följande innehåll, tillsammans med exempelkod, förklarar hur man konverterar listor (matriser) med strängar (str) och listor med tal (int, float) till varandra i Python.

  • Konvertera en lista med siffror till en lista med strängar
    • Konvertera ett tal till en decimalsträng
    • Konverterar numeriska värden till binära, oktala och hexadecimala strängar.
    • Konverterar ett numeriskt värde till en sträng i exponentiell notation.
  • Konvertera en lista med strängar till en lista med siffror
    • Konvertera decimalsträng till numerisk sträng
    • Konverterar binära, oktala och hexadecimala strängar till siffror.
    • Konverterar strängar i exponentiell notation till numeriska värden.
    • Konvertera endast strängar som kan konverteras till siffror.

När du skapar en ny lista från en lista är listförståelser enklare att skriva än for-slingor. I exempelkoden i den här artikeln används också list comprehensions. Mer information om listförståelser finns i följande artikel.

Observera att listor kan lagra olika typer av data och skiljer sig strikt från matriser. Använd array (standardbiblioteket) eller NumPy i följande fall.

  • Jag vill hantera processer som kräver minnesstorlek och minnesadresser.
  • Vill hantera matriser för numerisk bearbetning av stora datamängder osv.

Konvertera en lista med siffror till en lista med strängar

Konvertera ett tal till en decimalsträng

Använd str() för att konvertera från numerisk till sträng.

I Python kan tal uttryckas i flera olika format, bland annat exponentiellt, hexadecimalt och binärt (hexadecimal och binär notation). str()-konverteringen resulterar i en sträng i normal decimal notation.

Beroende på antalet siffror kan exponentiell notation användas automatiskt.

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

Konverterar numeriska värden till binära, oktala och hexadecimala strängar.

För att konvertera strängar till binära, oktala eller hexadecimala strängar (binär notation, oktal notation eller hexadecimal notation) finns följande metoder.

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

Med funktionen format() är det möjligt att fylla i nollor och justera siffrorna.

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

Konverterar ett numeriskt värde till en sträng i exponentiell notation.

Som nämnts ovan kan vissa fall automatiskt vara i exponentiell notation beroende på antalet siffror. Om du alltid vill konvertera till en sträng i exponentiell notation använder du dock något av följande

  • format()
  • str.format()

Mer information om funktionen format() och strängmetoden str.format() finns i följande artikel.

Antalet siffror i mantissadelen kan anges. Om ett E med versaler används som argument är utdatasträngen också ett E med versaler.

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

Konvertera en lista med strängar till en lista med siffror

Konvertera decimalsträng till numerisk sträng

Använd int() eller float() för att konvertera från sträng till tal.

int() är en konvertering till ett heltal och float() är en konvertering till ett flyttal.

I float() kompletteras strängar med utelämnad heltalsdel med 0 för heltalsdelen.

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]

Konverterar binära, oktala och hexadecimala strängar till siffror.

Det andra argumentet i int() kan vara ett radix: 2 för binär, 8 för oktal och 16 för hexadecimal, vilket omvandlar en sträng till ett tal.

Om 0 anges omvandlas var och en av följande strängar med prefix till ett heltal.

  • 0b
    • binära siffror
  • 0o
    • oktal
  • 0x
    • hexadecimalt
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]

Konverterar strängar i exponentiell notation till numeriska värden.

Strängar i exponentiell notation kan konverteras direkt med float() utan särskilda specifikationer.

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]

Konvertera endast strängar som kan konverteras till siffror.

Om du skickar en sträng som inte kan konverteras till ett tal till int() eller float() uppstår ett ValueError.

Om en ny funktion definieras som returnerar falskt vid fel, kan endast element som kan konverteras konverteras till tal och bli element i listan.

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]