Følgende indhold og kodeeksempler forklarer, hvordan man konverterer lister (arrays) af strenge (str) og lister af tal (int, float) til hinanden i Python.
- Konverter en liste af tal til en liste af strenge
- Konverter et tal til en decimalstreng
- Konverterer numeriske værdier til binære, oktale og hexadecimale strenge
- Konverterer en numerisk værdi til en streng i eksponentiel notation
- Konverter en liste af strenge til en liste af tal
- Konverter decimalstreng til numerisk
- Konverterer binære, oktale og hexadecimale strenge til tal
- Konverterer strenge i eksponentiel notation til numeriske værdier
- Konverter kun strenge, der kan konverteres til tal
Når der skal genereres en ny liste fra en liste, er list comprehensions enklere at skrive end for-loops. Prøvekoden i denne artikel bruger også list comprehensions. For nærmere oplysninger om list comprehensions henvises til følgende artikel.
Bemærk, at lister kan lagre forskellige typer data og er helt forskellige fra arrays. Brug array (standardbiblioteket) eller NumPy i følgende tilfælde.
- Jeg ønsker at håndtere processer, der kræver hukommelsesstørrelse og hukommelsesadresser.
- Ønsker at håndtere arrays til numerisk behandling af store datasæt osv.
Konverter en liste af tal til en liste af strenge
Konverter et tal til en decimalstreng
Brug str() til at konvertere fra numerisk til streng.
I Python kan tal udtrykkes i en række forskellige formater, herunder eksponentiel, hexadecimal og binær (hexadecimal og binær notation). str()-konvertering resulterer i en streng i normal decimal notation.
Afhængigt af antallet af cifre kan der automatisk anvendes eksponentiel notation.
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']
Konverterer numeriske værdier til binære, oktale og hexadecimale strenge
For at konvertere til binære, oktale eller hexadecimale (binær notation, oktal notation eller hexadecimal notation) strenge er der følgende metoder til rådighed.
bin()
oct()
hex()
format()
str.format()
Med funktionen format() er det muligt at udfylde nuller og justere cifrene.
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']
Konverterer en numerisk værdi til en streng i eksponentiel notation
Som nævnt ovenfor kan nogle tilfælde automatisk være i eksponentiel notation afhængigt af antallet af cifre. Hvis du altid vil konvertere til en streng i eksponentiel notation, skal du dog bruge en af følgende fremgangsmåder
format()
str.format()
Du kan finde flere oplysninger om funktionen format() og strengmetoden str.format() i følgende artikel.
- RELATERET:Formatkonvertering i Python, format (0-fyldning, eksponentiel notation, hexadecimal, osv.)
Antallet af cifre i mantisse-delen kan angives. Hvis der anvendes et stort E som argument, er outputstrengen også et stort 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']
Konverter en liste af strenge til en liste af tal
Konverter decimalstreng til numerisk
Brug int() eller float() til at konvertere fra streng til tal.
int() er en konvertering til et heltal, og float() er en konvertering til et flydende punkttal.
I float() suppleres strenge, hvor den hele del er udeladt, med 0 for den hele del.
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]
Konverterer binære, oktale og hexadecimale strenge til tal
Det andet argument i int() kan være en radix: 2 for binær, 8 for oktal og 16 for hexadecimal, hvilket konverterer en streng til et tal.
Hvis der angives 0, konverteres hver af de følgende strenge med præfiks til et heltal.
0b
- binære cifre
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]
Konverterer strenge i eksponentiel notation til numeriske værdier
Strings i eksponentiel notation kan konverteres direkte med float() uden behov for særlige 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]
Konverter kun strenge, der kan konverteres til tal
Hvis en streng, der ikke kan konverteres til et tal, overføres til int() eller float(), resulterer det i en ValueError.
Hvis der defineres en ny funktion, der returnerer false ved fejl, kan kun de elementer, der kan konverteres, konverteres til tal og blive elementer i listen.
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]