Menukar senarai rentetan (tatasusunan) dan senarai nombor antara satu sama lain dalam Python

Perniagaan

Kandungan berikut, bersama-sama dengan kod sampel, menerangkan cara menukar senarai (tatasusunan) rentetan (str) dan senarai nombor (int, float) antara satu sama lain dalam Python.

  • Tukar senarai nombor kepada senarai rentetan
    • Tukar nombor kepada rentetan perpuluhan
    • Menukar nilai berangka kepada rentetan perduaan, perlapanan dan perenambelasan
    • Menukar nilai berangka kepada rentetan dalam tatatanda eksponen
  • Tukar senarai rentetan kepada senarai nombor
    • Tukar rentetan perpuluhan kepada angka
    • Menukar rentetan perduaan, perlapanan dan perenambelasan kepada nombor
    • Menukar rentetan dalam tatatanda eksponen kepada nilai berangka
    • Tukar hanya rentetan yang boleh ditukar kepada nombor

Apabila menjana senarai baharu daripada senarai, pemahaman senarai adalah lebih mudah untuk ditulis berbanding untuk gelung. Kod sampel dalam artikel ini juga menggunakan pemahaman senarai. Untuk butiran pemahaman senarai, lihat artikel berikut.

Ambil perhatian bahawa senarai boleh menyimpan jenis data yang berbeza dan berbeza daripada tatasusunan. Gunakan tatasusunan (pustaka standard) atau NumPy dalam kes berikut.

  • Saya mahu mengendalikan proses yang memerlukan saiz memori dan alamat memori.
  • Ingin mengendalikan tatasusunan untuk pemprosesan berangka bagi set data yang besar, dsb.

Tukar senarai nombor kepada senarai rentetan

Tukar nombor kepada rentetan perpuluhan

Gunakan str() untuk menukar daripada angka kepada rentetan.

Dalam Python, nombor boleh dinyatakan dalam pelbagai format, termasuk eksponen, perenambelasan dan binari (notasi perenambelasan dan binari). str() penukaran menghasilkan rentetan dalam notasi perpuluhan biasa.

Bergantung pada bilangan digit, tatatanda eksponen boleh digunakan secara automatik.

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

Menukar nilai berangka kepada rentetan perduaan, perlapanan dan perenambelasan

Untuk menukar kepada rentetan perduaan, perlapanan atau heksadesimal (notasi perduaan, tatatanda perlapanan atau heksadesimal), kaedah berikut tersedia.

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

Dengan fungsi format(), adalah mungkin untuk mengisi sifar dan melaraskan digit.

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

Menukar nilai berangka kepada rentetan dalam tatatanda eksponen

Seperti yang dinyatakan di atas, sesetengah kes mungkin secara automatik berada dalam notasi eksponen bergantung pada bilangan digit. Walau bagaimanapun, untuk sentiasa menukar kepada rentetan dalam tatatanda eksponen, gunakan salah satu daripada yang berikut

  • format()
  • str.format()

Untuk mendapatkan maklumat lanjut tentang fungsi format() dan kaedah rentetan str.format(), lihat artikel berikut.

Bilangan digit bahagian mantissa boleh ditentukan. Jika huruf besar E digunakan sebagai hujah, rentetan output juga ialah huruf besar 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']

Tukar senarai rentetan kepada senarai nombor

Tukar rentetan perpuluhan kepada angka

Gunakan int() atau float() untuk menukar daripada rentetan kepada nombor.

int() ialah penukaran kepada integer, dan float() ialah penukaran kepada nombor titik terapung.

Dalam float(), rentetan dengan bahagian integer diabaikan dilengkapkan dengan 0 untuk bahagian integer.

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]

Menukar rentetan perduaan, perlapanan dan perenambelasan kepada nombor

Argumen kedua int() boleh menjadi radix: 2 untuk perduaan, 8 untuk perlapanan, dan 16 untuk perenambelasan, menukar rentetan kepada nombor.

Jika 0 ditentukan, setiap rentetan awalan berikut ditukar kepada integer.

  • 0b
    • digit binari
  • 0o
    • oktal
  • 0x
    • perenambelasan
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]

Menukar rentetan dalam tatatanda eksponen kepada nilai berangka

Rentetan dalam tatatanda eksponen boleh ditukar terus dengan float() tanpa memerlukan spesifikasi khas.

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]

Tukar hanya rentetan yang boleh ditukar kepada nombor

Melepasi rentetan yang tidak boleh ditukar kepada nombor kepada int() atau float() akan menghasilkan ValueError.

Jika fungsi baharu ditakrifkan yang mengembalikan palsu apabila ralat, hanya elemen yang boleh ditukar boleh ditukar kepada nombor dan menjadi elemen senarai.

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]