Kubadilisha orodha za safu (safu) na orodha za nambari kwa kila mmoja kwenye Python

Biashara

Yaliyomo ifuatayo, pamoja na msimbo wa sampuli, inaelezea jinsi ya kubadilisha orodha (safu) za safu (str) na orodha za nambari (int, kuelea) kwa kila mmoja kwenye Python.

  • Badilisha orodha ya nambari kuwa orodha ya mifuatano
    • Badilisha nambari kuwa safu ya desimali
    • Hubadilisha thamani za nambari ziwe mifuatano ya binary, oktali na heksadesimali
    • Hubadilisha thamani ya nambari kuwa mfuatano katika nukuu ya ufafanuzi
  • Badilisha orodha ya mifuatano kuwa orodha ya nambari
    • Badilisha mfuatano wa desimali kuwa nambari
    • Hubadilisha mifuatano ya binary, oktali, na heksadesimali kuwa nambari
    • Hubadilisha mifuatano katika nukuu ya kielelezo kuwa thamani za nambari
    • Badilisha tu mifuatano ambayo inaweza kubadilishwa kuwa nambari

Wakati wa kuunda orodha mpya kutoka kwa orodha, ufahamu wa orodha ni rahisi kuandika kuliko kwa vitanzi. Nambari ya mfano katika kifungu hiki pia hutumia ufahamu wa orodha. Kwa maelezo ya ufahamu wa orodha, ona makala ifuatayo.

Kumbuka kuwa orodha zinaweza kuhifadhi aina tofauti za data na ni tofauti kabisa na safu. Tumia safu (maktaba ya kawaida) au NumPy katika hali zifuatazo.

  • Ninataka kushughulikia michakato inayohitaji saizi ya kumbukumbu na anwani za kumbukumbu.
  • Unataka kushughulikia safu za usindikaji wa nambari za seti kubwa za data, nk.

Badilisha orodha ya nambari kuwa orodha ya mifuatano

Badilisha nambari kuwa safu ya desimali

Tumia str() kubadilisha kutoka nambari hadi kamba.

Katika Python, nambari zinaweza kuonyeshwa katika miundo mbalimbali, ikiwa ni pamoja na kielelezo, heksadesimali, na binary (hexadecimal na nukuu binary). str() ubadilishaji husababisha mfuatano katika nukuu ya kawaida ya desimali.

Kulingana na idadi ya tarakimu, nukuu ya kielelezo inaweza kutumika kiotomatiki.

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

Hubadilisha thamani za nambari ziwe mifuatano ya binary, oktali na heksadesimali

Ili kubadilisha hadi mifuatano ya binary, octal, au hexadesimoli (nukuu jozi, nukuu octal, au nukuu heksadesimali), mbinu zifuatazo zinapatikana.

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

Kwa muundo () kazi, inawezekana kujaza zero na kurekebisha tarakimu.

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

Hubadilisha thamani ya nambari kuwa mfuatano katika nukuu ya ufafanuzi

Kama ilivyoelezwa hapo juu, baadhi ya matukio yanaweza kuwa katika nukuu ya kiotomatiki kulingana na idadi ya tarakimu. Walakini, ili kubadilisha kila wakati kuwa mfuatano katika nukuu ya ufafanuzi, tumia mojawapo ya yafuatayo

  • format()
  • str.format()

Kwa habari zaidi juu ya kitendakazi cha umbizo() na mbinu ya kamba str.format(), ona makala ifuatayo.

Idadi ya tarakimu za sehemu ya mantissa inaweza kutajwa. Ikiwa herufi kubwa E inatumiwa kama hoja, mfuatano wa pato pia ni herufi kubwa 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']

Badilisha orodha ya mifuatano kuwa orodha ya nambari

Badilisha mfuatano wa desimali kuwa nambari

Tumia int() au float() kubadilisha kutoka kwa kamba hadi nambari.

int() ni ubadilishaji kuwa nambari kamili, na float() ni ubadilishaji hadi nambari ya sehemu inayoelea.

Katika float(), mifuatano iliyo na sehemu kamili iliyoachwa hujazwa na 0 kwa sehemu kamili.

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]

Hubadilisha mifuatano ya binary, oktali, na heksadesimali kuwa nambari

Hoja ya pili ya int() inaweza kuwa radix: 2 kwa binary, 8 kwa octal, na 16 kwa hexadesimoli, kubadilisha kamba hadi nambari.

Ikiwa 0 imebainishwa, kila moja ya mifuatano yenye viambishi awali inabadilishwa kuwa nambari kamili.

  • 0b
    • tarakimu za binary
  • 0o
    • octal
  • 0x
    • hexadesimoli
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]

Hubadilisha mifuatano katika nukuu ya kielelezo kuwa thamani za nambari

Mifuatano katika nukuu ya kielelezo inaweza kubadilishwa moja kwa moja na float() bila hitaji la vipimo maalum.

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]

Badilisha tu mifuatano ambayo inaweza kubadilishwa kuwa nambari

Kupitisha mfuatano ambao hauwezi kubadilishwa kuwa nambari kuwa int() au float() itasababisha ValueError.

Ikiwa kipengele kipya cha kukokotoa kitafafanuliwa ambacho kinarejesha uwongo kwenye hitilafu, vipengele vinavyoweza kubadilishwa pekee vinaweza kubadilishwa kuwa nambari na kuwa vipengele vya orodha.

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]