Перетворення списків рядків (масивів) і списків чисел один в одного в Python

Бізнес

Наведений нижче вміст разом із прикладом коду пояснює, як перетворити списки (масиви) рядків (str) і списки чисел (int, float) один в одного в Python.

  • Перетворіть список чисел у список рядків
    • Перетворіть число в десятковий рядок
    • Перетворює числові значення в двійкові, вісімкові та шістнадцяткові рядки
    • Перетворює числове значення в рядок в експоненційному позначенні
  • Перетворіть список рядків у список чисел
    • Перетворити десятковий рядок у числовий
    • Перетворює двійкові, вісімкові та шістнадцяткові рядки в числа
    • Перетворює рядки в експоненційному позначенні на числові значення
    • Перетворюйте лише рядки, які можна перетворити на числа

Під час генерування нового списку зі списку простіше написати розуміння списку, ніж цикли for. Зразок коду в цій статті також використовує список осмислення. Щоб дізнатися більше про розуміння списку, перегляньте наступну статтю.

Зауважте, що списки можуть зберігати різні типи даних і суворо відрізняються від масивів. Використовуйте масив (стандартна бібліотека) або 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() див. у наступній статті.

Можна вказати кількість розрядів частини мантиси. Якщо в якості аргументу використовується великий регістр E, вихідний рядок також є великим 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']

Перетворіть список рядків у список чисел

Перетворити десятковий рядок у числовий

Використовуйте 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]