Conversia reciprocă a listelor de șiruri de caractere (array) și a listelor de numere în Python

Afaceri

Cuprinsul următor, împreună cu exemple de cod, explică modul în care se convertesc listele (array-uri) de șiruri de caractere (str) și listele de numere (int, float) în Python.

  • Conversia unei liste de numere într-o listă de șiruri de caractere
    • Conversia unui număr într-un șir zecimal
    • Convertește valorile numerice în șiruri binare, octale și hexazecimale
    • Convertește o valoare numerică într-un șir de caractere în notație exponențială
  • Conversia unei liste de șiruri de caractere într-o listă de numere
    • Conversia șirului zecimal în numeric
    • Convertește șirurile binare, octale și hexazecimale în numere
    • Convertește șirurile de caractere în notație exponențială în valori numerice
    • Conversia numai a șirurilor de caractere care pot fi convertite în numere

Atunci când se generează o nouă listă dintr-o listă, înțelegerile de liste sunt mai simplu de scris decât buclele for. Exemplul de cod din acest articol utilizează, de asemenea, comprehensiuni de listă. Pentru mai multe detalii despre comprehensiunile de liste, consultați următorul articol.

Rețineți că listele pot stoca diferite tipuri de date și sunt strict diferite de array-uri. Utilizați array (biblioteca standard) sau NumPy în următoarele cazuri.

  • Vreau să gestionez procesele care necesită dimensiunea memoriei și adresele de memorie.
  • Doriți să manipulați array-uri pentru procesarea numerică a unor seturi mari de date etc.

Conversia unei liste de numere într-o listă de șiruri de caractere

Conversia unui număr într-un șir zecimal

Utilizați str() pentru a converti din numere în șiruri de caractere.

În Python, numerele pot fi exprimate într-o varietate de formate, inclusiv exponențial, hexazecimal și binar (notație hexazecimal și binară). conversia str() are ca rezultat un șir de caractere în notație zecimală normală.

În funcție de numărul de cifre, se poate utiliza automat notația exponențială.

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

Convertește valorile numerice în șiruri binare, octale și hexazecimale

Pentru a converti în șiruri binare, octale sau hexazecimale (notație binară, notație octală sau notație hexazecimală), sunt disponibile următoarele metode.

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

Cu ajutorul funcției format(), este posibil să se completeze zerourile și să se ajusteze cifrele.

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

Convertește o valoare numerică într-un șir de caractere în notație exponențială

După cum s-a menționat mai sus, unele cazuri pot fi în mod automat în notație exponențială, în funcție de numărul de cifre. Cu toate acestea, pentru a converti întotdeauna într-un șir de caractere în notație exponențială, utilizați una dintre următoarele opțiuni

  • format()
  • str.format()

Pentru mai multe informații despre funcția format() și metoda string str.format(), consultați următorul articol.

Se poate specifica numărul de cifre din partea mantisă. În cazul în care se utilizează un E majuscul ca argument, șirul de ieșire este, de asemenea, un E majuscul.

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

Conversia unei liste de șiruri de caractere într-o listă de numere

Conversia șirului zecimal în numeric

Utilizați int() sau float() pentru a converti din șir de caractere în număr.

int() este o conversie la un număr întreg, iar float() este o conversie la un număr în virgulă mobilă.

În float(), șirurile cu partea întreagă omisă sunt completate cu 0 pentru partea întreagă.

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]

Convertește șirurile binare, octale și hexazecimale în numere

Al doilea argument al lui int() poate fi un radix: 2 pentru binar, 8 pentru octal și 16 pentru hexazecimal, transformând un șir de caractere într-un număr.

Dacă se specifică 0, fiecare dintre următoarele șiruri de caractere prefixate este convertit într-un număr întreg.

  • 0b
    • Cifre binare
  • 0o
    • octal
  • 0x
    • hexazecimal
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]

Convertește șirurile de caractere în notație exponențială în valori numerice

Șirurile de caractere în notație exponențială pot fi convertite direct cu float() fără a fi nevoie de specificații speciale.

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]

Conversia numai a șirurilor de caractere care pot fi convertite în numere

Transmiterea unui șir de caractere care nu poate fi convertit într-un număr la int() sau float() va avea ca rezultat o eroare ValueError.

Dacă se definește o nouă funcție care returnează false în caz de eroare, numai elementele care pot fi convertite pot fi convertite în numere și devin elemente ale listei.

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]
Copied title and URL