Konwertowanie list łańcuchów (tablic) i list liczb na siebie w Pythonie

Biznes

Poniższe treści, wraz z przykładowym kodem, wyjaśniają, jak w Pythonie konwertować listy (tablice) łańcuchów (str) i listy liczb (int, float) na siebie nawzajem.

  • Przekształć listę liczb na listę ciągów znaków
    • Konwertowanie liczby na ciąg dziesiętny
    • Konwertowanie wartości liczbowych na ciągi binarne, ósemkowe i szesnastkowe.
    • Konwertuje wartość liczbową na ciąg znaków w notacji wykładniczej
  • Przekształć listę ciągów znaków na listę liczb
    • Konwertuj ciąg dziesiętny na numeryczny
    • Konwertuje ciągi binarne, ósemkowe i szesnastkowe na liczby.
    • Konwertuje ciągi znaków w notacji wykładniczej na wartości liczbowe
    • Konwertuj tylko ciągi znaków, które można przekonwertować na liczby

W przypadku generowania nowej listy na podstawie listy, wyliczenia list są prostsze do napisania niż pętle for. Przykładowy kod w tym artykule również używa list comprehensions. Szczegółowe informacje na temat list comprehensions można znaleźć w poniższym artykule.

Należy pamiętać, że listy mogą przechowywać różne typy danych i różnią się ściśle od tablic. W poniższych przypadkach należy użyć tablicy (biblioteka standardowa) lub NumPy.

  • Chcę obsłużyć procesy, które wymagają rozmiaru pamięci i adresów pamięci.
  • Potrzeba obsługi tablic do numerycznego przetwarzania dużych zbiorów danych itp.

Przekształć listę liczb na listę ciągów znaków

Konwertowanie liczby na ciąg dziesiętny

Użyj funkcji str() do konwersji z liczby na ciąg znaków.

W Pythonie liczby można wyrażać w różnych formatach, w tym wykładniczym, szesnastkowym i binarnym (notacja szesnastkowa i binarna). konwersja str() daje w wyniku ciąg znaków w normalnej notacji dziesiętnej.

W zależności od liczby cyfr może być automatycznie stosowana notacja wykładnicza.

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

Konwertowanie wartości liczbowych na ciągi binarne, ósemkowe i szesnastkowe.

Do konwersji na ciągi binarne, ósemkowe lub szesnastkowe (notacja binarna, ósemkowa lub szesnastkowa) dostępne są następujące metody.

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

Za pomocą funkcji format() można uzupełnić zera i dostosować cyfry.

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

Konwertuje wartość liczbową na ciąg znaków w notacji wykładniczej

Jak wspomniano powyżej, niektóre przypadki mogą być automatycznie zapisywane w notacji wykładniczej, zależnie od liczby cyfr. Aby jednak zawsze konwertować na ciąg znaków w notacji wykładniczej, należy użyć jednej z poniższych metod

  • format()
  • str.format()

Więcej informacji na temat funkcji format() i metody łańcuchowej str.format() można znaleźć w poniższym artykule.

Można określić liczbę cyfr części mantysy. Jeśli jako argumentu użyto wielkiej litery E, to łańcuch wyjściowy również będzie wielką literą 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']

Przekształć listę ciągów znaków na listę liczb

Konwertuj ciąg dziesiętny na numeryczny

Użyj funkcji int() lub float() do konwersji z łańcucha na liczbę.

int() to konwersja na liczbę całkowitą, a float() to konwersja na liczbę zmiennoprzecinkową.

W metodzie float() łańcuchy z pominiętą częścią całkowitą są uzupełniane przez 0 dla części całkowitej.

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]

Konwertuje ciągi binarne, ósemkowe i szesnastkowe na liczby.

Drugim argumentem funkcji int() może być radix: 2 dla binarnego, 8 dla ósemkowego i 16 dla szesnastkowego, konwertując ciąg znaków na liczbę.

Jeśli podano 0, każdy z poniższych łańcuchów przedrostkowych jest konwertowany na liczbę całkowitą.

  • 0b
    • cyfry binarne
  • 0o
    • oktal
  • 0x
    • szesnastkowy
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]

Konwertuje ciągi znaków w notacji wykładniczej na wartości liczbowe

Ciągi w notacji wykładniczej mogą być konwertowane bezpośrednio za pomocą funkcji float() bez konieczności podawania specjalnych specyfikacji.

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]

Konwertuj tylko ciągi znaków, które można przekonwertować na liczby

Przekazanie do funkcji int() lub float() ciągu znaków, którego nie można przekonwertować na liczbę, spowoduje wystąpienie błędu ValueError.

Jeśli zostanie zdefiniowana nowa funkcja, która w przypadku błędu zwraca wartość false, to tylko elementy, które można przekonwertować, mogą zostać przekonwertowane na liczby i stać się elementami listy.

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