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.
- BERKAITAN:Format penukaran dalam Python, format (0-pengisian, notasi eksponen, perenambelasan, dll.)
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
- BERKAITAN:Tukar nombor dan rentetan perduaan, perlapanan dan perenambelasan antara satu sama lain dalam Python
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]