Konvertierung von Listen mit Zeichenketten (Arrays) und Listen mit Zahlen in Python ineinander

Geschäft

Im Folgenden wird anhand von Beispielcode erklärt, wie man in Python Listen (Arrays) von Strings (str) und Listen von Zahlen (int, float) ineinander umwandelt.

  • Konvertierung einer Liste von Zahlen in eine Liste von Zeichenketten
    • Umwandlung einer Zahl in eine Dezimalzeichenfolge
    • Konvertiert numerische Werte in binäre, oktale und hexadezimale Zeichenfolgen
    • Konvertiert einen numerischen Wert in einen String in Exponentialschreibweise
  • Konvertierung einer Liste von Zeichenketten in eine Liste von Zahlen
    • Dezimale Zeichenkette in numerisch umwandeln
    • Konvertiert binäre, oktale und hexadezimale Zeichenketten in Zahlen
    • Konvertiert Zeichenketten in Exponentialschreibweise in numerische Werte
    • Konvertiert nur Zeichenketten, die in Zahlen umgewandelt werden können

Bei der Erzeugung einer neuen Liste aus einer Liste sind Listenauflösungen einfacher zu schreiben als for-Schleifen. Der Beispielcode in diesem Artikel verwendet ebenfalls Listenkomplexe. Einzelheiten zu Listenauflösungen finden Sie im folgenden Artikel.

Beachten Sie, dass Listen verschiedene Datentypen speichern können und sich streng von Arrays unterscheiden. Verwenden Sie Array (Standardbibliothek) oder NumPy in den folgenden Fällen.

  • Ich möchte Prozesse behandeln, die Speichergröße und Speicheradressen benötigen.
  • Sie möchten Arrays für die numerische Verarbeitung großer Datensätze usw. verwenden.

Konvertierung einer Liste von Zahlen in eine Liste von Zeichenketten

Umwandlung einer Zahl in eine Dezimalzeichenfolge

Verwenden Sie str() zur Umwandlung von numerischen Werten in Zeichenketten.

In Python können Zahlen in verschiedenen Formaten ausgedrückt werden, darunter exponentiell, hexadezimal und binär (hexadezimale und binäre Notation). Die str()-Konvertierung ergibt eine Zeichenkette in normaler dezimaler Notation.

Je nach Anzahl der Ziffern kann automatisch die Exponentialschreibweise verwendet werden.

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

Konvertiert numerische Werte in binäre, oktale und hexadezimale Zeichenfolgen

Für die Konvertierung in binäre, oktale oder hexadezimale (binäre Notation, oktale Notation oder hexadezimale Notation) Zeichenketten stehen die folgenden Methoden zur Verfügung.

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

Mit der Funktion format() ist es möglich, die Nullen aufzufüllen und die Ziffern anzupassen.

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

Konvertiert einen numerischen Wert in einen String in Exponentialschreibweise

Wie bereits erwähnt, können einige Fälle je nach Anzahl der Ziffern automatisch in exponentieller Schreibweise dargestellt werden. Um jedoch immer in eine Zeichenkette in Exponentialschreibweise zu konvertieren, verwenden Sie eine der folgenden Möglichkeiten

  • format()
  • str.format()

Weitere Informationen über die Funktion format() und die String-Methode str.format() finden Sie im folgenden Artikel.

Die Anzahl der Ziffern des Mantissenteils kann angegeben werden. Wird ein E in Großbuchstaben als Argument verwendet, ist die Ausgabezeichenfolge ebenfalls ein E in Großbuchstaben.

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

Konvertierung einer Liste von Zeichenketten in eine Liste von Zahlen

Dezimale Zeichenkette in numerisch umwandeln

Verwenden Sie int() oder float() zur Umwandlung von String in Zahl.

int() ist eine Umwandlung in eine Ganzzahl und float() ist eine Umwandlung in eine Gleitkommazahl.

In float() werden Zeichenketten, bei denen der ganzzahlige Teil weggelassen wird, mit 0 für den ganzzahligen Teil ergänzt.

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]

Konvertiert binäre, oktale und hexadezimale Zeichenketten in Zahlen

Das zweite Argument von int() kann ein Radix sein: 2 für binär, 8 für oktal und 16 für hexadezimal, wodurch eine Zeichenkette in eine Zahl umgewandelt wird.

Wird 0 angegeben, wird jede der folgenden vorangestellten Zeichenketten in eine Ganzzahl umgewandelt.

  • 0b
    • Binärziffern
  • 0o
    • oktal
  • 0x
    • hexadezimal
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]

Konvertiert Zeichenketten in Exponentialschreibweise in numerische Werte

Zeichenketten in Exponentialschreibweise können direkt mit float() konvertiert werden, ohne dass eine spezielle Angabe erforderlich ist.

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]

Konvertiert nur Zeichenketten, die in Zahlen umgewandelt werden können

Die Übergabe eines Strings, der nicht in eine Zahl umgewandelt werden kann, an int() oder float() führt zu einem ValueError.

Wenn eine neue Funktion definiert wird, die im Fehlerfall false zurückgibt, können nur Elemente, die umgewandelt werden können, in Zahlen umgewandelt werden und zu Elementen der Liste werden.

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]