Python-da sətirlərin (massivlərin) və nömrələrin siyahılarının bir-birinə çevrilməsi

Biznes

Aşağıdakı məzmun nümunə kodu ilə birlikdə Python-da sətirlərin (str) və nömrələrin (int, float) siyahılarının (massivlərinin) bir-birinə çevrilməsini izah edir.

  • Rəqəmlər siyahısını sətirlər siyahısına çevirin
    • Ədədi onluq sıraya çevirin
    • Rəqəmsal dəyərləri ikilik, səkkizlik və onaltılıq sətirlərə çevirir
    • Rəqəm dəyərini eksponensial notasiyada sətirə çevirir
  • Sətirlərin siyahısını nömrələr siyahısına çevirin
    • Onluq sətri rəqəmə çevirin
    • İkilik, səkkizlik və onaltılıq sətirləri ədədlərə çevirir
    • Eksponensial notasiyadakı sətirləri ədədi qiymətlərə çevirir
    • Yalnız rəqəmlərə çevrilə bilən sətirləri çevirin

Siyahıdan yeni siyahı yaradarkən, siyahı başa düşülmələri yazmaq for döngələrindən daha asandır. Bu məqalədəki nümunə kodda siyahı anlayışlarından da istifadə olunur. Siyahı anlayışlarının təfərrüatları üçün aşağıdakı məqaləyə baxın.

Qeyd edək ki, siyahılar müxtəlif növ verilənləri saxlaya bilər və massivlərdən ciddi şəkildə fərqlənir. Aşağıdakı hallarda massivdən (standart kitabxana) və ya NumPy-dən istifadə edin.

  • Mən yaddaş ölçüsü və yaddaş ünvanları tələb edən prosesləri idarə etmək istəyirəm.
  • Böyük məlumat dəstlərinin ədədi emalı üçün massivləri idarə etmək istəyirsiniz və s.

Rəqəmlər siyahısını sətirlər siyahısına çevirin

Ədədi onluq sıraya çevirin

Rəqəmdən sətirə çevirmək üçün str() istifadə edin.

Python-da ədədlər eksponensial, onaltılıq və ikilik (onaltılıq və ikilik notation) daxil olmaqla müxtəlif formatlarda ifadə edilə bilər. str() çevrilməsi normal onluq notasiyada sətirlə nəticələnir.

Rəqəmlərin sayından asılı olaraq eksponensial qeyd avtomatik olaraq istifadə edilə bilər.

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

Rəqəmsal dəyərləri ikilik, səkkizlik və onaltılıq sətirlərə çevirir

İkilik, səkkizlik və ya altıbucaqlı (ikilik qeyd, səkkizlik və ya onaltılıq qeyd) sətirlərə çevirmək üçün aşağıdakı üsullar mövcuddur.

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

Format() funksiyası ilə sıfırları doldurmaq və rəqəmləri tənzimləmək mümkündür.

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

Rəqəm dəyərini eksponensial notasiyada sətirə çevirir

Yuxarıda qeyd edildiyi kimi, bəzi hallar rəqəmlərin sayından asılı olaraq avtomatik olaraq eksponensial notasiyada ola bilər. Bununla belə, həmişə eksponensial notasiyada sətirə çevirmək üçün aşağıdakılardan birini istifadə edin

  • format()
  • str.format()

Format() funksiyası və string metodu str.format() haqqında ətraflı məlumat üçün aşağıdakı məqaləyə baxın.

Mantis hissəsinin rəqəmlərinin sayı müəyyən edilə bilər. Arqument kimi böyük E hərfi istifadə edilərsə, çıxış sətri də böyük E hərfidir.

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

Sətirlərin siyahısını nömrələr siyahısına çevirin

Onluq sətri rəqəmə çevirin

Sətirdən ədədə çevirmək üçün int() və ya float() istifadə edin.

int() tam ədədə, float() isə üzən nöqtəli ədədə çevrilmədir.

float()-da tam hissəsi buraxılmış sətirlər tam hissə üçün 0 ilə tamamlanır.

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]

İkilik, səkkizlik və onaltılıq sətirləri ədədlərə çevirir

int() funksiyasının ikinci arqumenti radiks ola bilər: ikilik üçün 2, səkkizlik üçün 8 və onaltılıq üçün 16, sətri ədədə çevirmək.

0 göstərilibsə, aşağıdakı prefiksli sətirlərin hər biri tam ədədə çevrilir.

  • 0b
    • ikili rəqəmlər
  • 0o
    • səkkizlik
  • 0x
    • onaltılıq
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]

Eksponensial notasiyadakı sətirləri ədədi qiymətlərə çevirir

Eksponensial notasiyadakı sətirlər xüsusi spesifikasiyaya ehtiyac olmadan birbaşa float() ilə çevrilə bilər.

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]

Yalnız rəqəmlərə çevrilə bilən sətirləri çevirin

Nömrəyə çevrilə bilməyən sətri int() və ya float()-a ötürmək ValueError ilə nəticələnəcək.

Səhv zamanı false qaytaran yeni funksiya müəyyən edilərsə, yalnız çevrilə bilən elementlər rəqəmlərə çevrilə və siyahının elementlərinə çevrilə bilər.

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]