Конвертовање листа стрингова (низова) и листа бројева једне у друге у Питхон-у

Бусинесс

Следећи садржаји, заједно са примером кода, објашњавају како да конвертујете листе (низови) стрингова (стр) и листе бројева (инт, флоат) једну у другу у Питхон-у.

  • Претворите листу бројева у листу низова
    • Претворите број у децимални низ
    • Конвертује нумеричке вредности у бинарне, окталне и хексадецималне стрингове
    • Конвертује нумеричку вредност у стринг у експоненцијалној нотацији
  • Претворите листу стрингова у листу бројева
    • Претворите децимални низ у нумерички
    • Претвара бинарне, окталне и хексадецималне стрингове у бројеве
    • Конвертује стрингове у експоненцијалној нотацији у нумеричке вредности
    • Конвертујте само низове који се могу конвертовати у бројеве

Када генеришете нову листу из листе, разумевање листе је једноставније за писање него за петље. Пример кода у овом чланку такође користи разумевање листе. За детаље о разумевању листе, погледајте следећи чланак.

Имајте на уму да листе могу да чувају различите типове података и да се стриктно разликују од низова. Користите низ (стандардна библиотека) или НумПи у следећим случајевима.

  • Желим да управљам процесима који захтевају величину меморије и меморијске адресе.
  • Желите да рукујете низовима за нумеричку обраду великих скупова података итд.

Претворите листу бројева у листу низова

Претворите број у децимални низ

Користите стр() за конверзију из нумеричког у стринг.

У Питхон-у бројеви могу бити изражени у различитим форматима, укључујући експоненцијални, хексадецимални и бинарни (хексадецимални и бинарни запис). стр() конверзија резултира стрингом у нормалном децималном запису.

У зависности од броја цифара, експоненцијална нотација се може користити аутоматски.

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

Конвертује нумеричке вредности у бинарне, окталне и хексадецималне стрингове

Да бисте конвертовали у бинарне, окталне или хексадецималне (бинарни запис, октални запис или хексадецимални запис) низове, доступне су следеће методе.

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

Помоћу функције формат() могуће је попунити нуле и подесити цифре.

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

Конвертује нумеричку вредност у стринг у експоненцијалној нотацији

Као што је горе поменуто, неки случајеви могу аутоматски бити у експоненцијалној нотацији у зависности од броја цифара. Међутим, да бисте увек конвертовали у стринг у експоненцијалној нотацији, користите једно од следећег

  • format()
  • str.format()

За више информација о функцији формат() и методи стрингова стр.формат(), погледајте следећи чланак.

Број цифара дела мантисе се може одредити. Ако се као аргумент користи велико слово Е, излазни низ је такође велико Е.

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

Претворите листу стрингова у листу бројева

Претворите децимални низ у нумерички

Користите инт() или флоат() да бисте претворили низ у број.

инт() је конверзија у цео број, а флоат() је конверзија у број са покретним зарезом.

У флоат(), низови са изостављеним целобројним делом се допуњују са 0 за целобројни део.

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]

Претвара бинарне, окталне и хексадецималне стрингове у бројеве

Други аргумент инт() може бити основа: 2 за бинарни, 8 за октални и 16 за хексадецимални, претварајући стринг у број.

Ако је наведено 0, сваки од следећих низова са префиксом се конвертује у цео број.

  • 0b
    • бинарне цифре
  • 0o
    • октални
  • 0x
    • хексадецимални
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]

Конвертује стрингове у експоненцијалној нотацији у нумеричке вредности

Низови у експоненцијалној нотацији могу се директно конвертовати помоћу флоат() без потребе за посебном спецификацијом.

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]

Конвертујте само низове који се могу конвертовати у бројеве

Прослеђивање стринга који се не може конвертовати у број у инт() или флоат() резултираће грешком вредности.

Ако је дефинисана нова функција која враћа фалсе у случају грешке, само елементи који се могу конвертовати могу се конвертовати у бројеве и постати елементи листе.

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]