Преобразуване на списъци от низове (масиви) и списъци от числа един към друг в Python

Бизнес

Следващото съдържание, заедно с примерен код, обяснява как да конвертирате списъци (масиви) от низове (str) и списъци от числа (int, float) един към друг в Python.

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

Когато се генерира нов списък от списък, разбирането на списъци е по-просто за писане от циклите for. Примерният код в тази статия също използва списъци с разбиране. За подробности относно разбирането на списъци вижте следната статия.

Обърнете внимание, че списъците могат да съхраняват различни типове данни и са строго различни от масивите. Използвайте array (стандартна библиотека) или NumPy в следните случаи.

  • Искам да обработвам процеси, които изискват размер на паметта и адреси на паметта.
  • Искате да работите с масиви за цифрова обработка на големи масиви от данни и др.

Конвертиране на списък от числа в списък от низове

Конвертиране на число в десетичен низ

Използвайте функцията str(), за да преобразувате число в низ.

В Python числата могат да се изразяват в различни формати, включително експоненциален, шестнадесетичен и двоичен (шестнадесетичен и двоичен запис). преобразуването str() води до низ в нормален десетичен запис.

В зависимост от броя на цифрите експоненциалният запис може да се използва автоматично.

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()

С функцията 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()

За повече информация относно функцията 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']

Конвертиране на списък от низове в списък от числа

Преобразуване на десетичен низ в цифров

Използвайте int() или float(), за да преобразувате низ в число.

int() е преобразуване в цяло число, а float() е преобразуване в число с плаваща запетая.

В float() низовете с пропусната целочислена част се допълват с 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]

Конвертира двоични, осмични и шестнадесетични низове в числа

Вторият аргумент на int() може да бъде радикс: 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]

Преобразува низове в експоненциален запис в числови стойности

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

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]

Конвертиране само на низове, които могат да бъдат конвертирани в числа

Подаването на низ, който не може да бъде превърнат в число, към int() или float() ще доведе до грешка ValueError.

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

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]
Copied title and URL