Els continguts següents, juntament amb el codi d’exemple, expliquen com convertir llistes (matrius) de cadenes (str) i llistes de nombres (int, float) entre si a Python.
- Converteix una llista de números en una llista de cadenes
- Converteix un nombre en una cadena decimal
- Converteix valors numèrics en cadenes binàries, octals i hexadecimals
- Converteix un valor numèric en una cadena en notació exponencial
- Converteix una llista de cadenes en una llista de números
- Converteix una cadena decimal en numèrica
- Converteix cadenes binàries, octals i hexadecimals en números
- Converteix cadenes en notació exponencial en valors numèrics
- Converteix només cadenes que es poden convertir en números
Quan es genera una llista nova a partir d’una llista, la comprensió de la llista és més senzilla d’escriure que els bucles for. El codi d’exemple d’aquest article també utilitza comprensió de llista. Per obtenir més informació sobre la comprensió de la llista, consulteu l’article següent.
- RELACIONATS:Com utilitzar la comprensió de llistes de Python
Tingueu en compte que les llistes poden emmagatzemar diferents tipus de dades i són estrictament diferents de les matrius. Utilitzeu array (biblioteca estàndard) o NumPy en els casos següents.
- Vull gestionar processos que requereixen mida de memòria i adreces de memòria.
- Voleu gestionar matrius per al processament numèric de grans conjunts de dades, etc.
Converteix una llista de números en una llista de cadenes
Converteix un nombre en una cadena decimal
Utilitzeu str() per convertir de numèric a cadena.
A Python, els nombres es poden expressar en una varietat de formats, incloent-hi exponencial, hexadecimal i binari (notació hexadecimal i binària). La conversió str() dóna com a resultat una cadena en notació decimal normal.
Depenent del nombre de dígits, la notació exponencial es pot utilitzar automàticament.
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']
Converteix valors numèrics en cadenes binàries, octals i hexadecimals
Per convertir a cadenes binàries, octals o hexadecimals (notació binària, notació octal o notació hexadecimal), hi ha disponibles els mètodes següents.
bin()
oct()
hex()
format()
str.format()
Amb la funció format() és possible omplir els zeros i ajustar els dígits.
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']
Converteix un valor numèric en una cadena en notació exponencial
Com s’ha esmentat anteriorment, alguns casos poden estar automàticament en notació exponencial depenent del nombre de dígits. Tanmateix, per convertir sempre a una cadena en notació exponencial, utilitzeu una de les opcions següents
format()
str.format()
Per obtenir més informació sobre la funció format() i el mètode de cadena str.format(), consulteu l’article següent.
- RELACIONATS:Conversió de format en Python, format (emplenament 0, notació exponencial, hexadecimal, etc.)
Es pot especificar el nombre de dígits de la part mantissa. Si s’utilitza una E majúscula com a argument, la cadena de sortida també és una E majúscula.
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']
Converteix una llista de cadenes en una llista de números
Converteix una cadena decimal en numèrica
Utilitzeu int() o float() per convertir de cadena a nombre.
int() és una conversió a un nombre enter, i float() és una conversió a un nombre de coma flotant.
A float(), les cadenes amb la part entera omesa es complementen amb 0 per a la part entera.
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]
Converteix cadenes binàries, octals i hexadecimals en números
El segon argument d’int() pot ser una base: 2 per a binari, 8 per a octal i 16 per a hexadecimal, convertint una cadena en un nombre.
Si s’especifica 0, cadascuna de les cadenes prefixades següents es converteix en un nombre enter.
0b
- dígits binaris
0o
- octal
0x
- hexadecimal
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]
Converteix cadenes en notació exponencial en valors numèrics
Les cadenes en notació exponencial es poden convertir directament amb float() sense necessitat d’especificacions especials.
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]
Converteix només cadenes que es poden convertir en números
Passar una cadena que no es pot convertir en un nombre a int() o float() donarà lloc a un ValueError.
Si es defineix una funció nova que retorna fals en cas d’error, només els elements que es poden convertir es poden convertir en números i esdevenir elements de la llista.
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]