Extrahieren, Ersetzen und Umwandeln bestimmter Elemente von Python-Listen (Arrays)

Geschäft

Um eine neue Liste in Python zu erzeugen, indem man nur die Elemente einer bestehenden Liste (Array) extrahiert oder löscht, die bestimmte Bedingungen erfüllen, oder indem man Ersetzungen oder Konvertierungen durchführt, verwendet man List Comprehensions.

Das Folgende wird hier erklärt, zusammen mit einem Beispielcode.

  • Grundform der Notation des Listenverständnisses
  • Wenden Sie das Verfahren auf alle Elemente der Liste an
  • Extrahieren und Löschen von Elementen aus der Liste, die die Kriterien erfüllen
  • Ersetzen oder Umwandeln von Elementen, die die Bedingungen der Liste erfüllen

Spezifische Beispiele für Listen von Zeichenketten finden Sie im folgenden Artikel.

Es ist auch möglich, Elemente, die die Kriterien nicht erfüllen, nach dem Zufallsprinzip zu extrahieren.

Beachten Sie, dass Listen verschiedene Datentypen speichern können und sich streng von Arrays unterscheiden. Wenn Sie Arrays in Prozessen behandeln wollen, die Speichergröße und Speicheradressen oder numerische Verarbeitung großer Daten erfordern, verwenden Sie array (Standardbibliothek) oder NumPy.

Die folgende Liste ist ein Beispiel

l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

Grundform der Notation des Listenverständnisses

Bei der Erzeugung einer neuen Liste aus einer Liste sind Listenauffassungen einfacher zu schreiben als for-Schleifen.

[expression for any variable name in iterable object if conditional expression]

Ein Ausdruck wird auf ein Element angewendet, das den bedingten Ausdruck eines iterierbaren Objekts (z. B. einer Liste oder eines Tupels) erfüllt, und wird zu einem Element einer neuen Liste. Der “if-Bedingungsausdruck” kann weggelassen werden; in diesem Fall wird der Ausdruck auf alle Elemente angewandt.

Weitere Einzelheiten, einschließlich der Notation zum Verständnis verschachtelter Listen, finden Sie im folgenden Artikel.

Wenden Sie das Verfahren auf alle Elemente der Liste an

Wenn Sie beispielsweise eine bestimmte Verarbeitung auf alle Elemente einer Liste anwenden möchten, beschreiben Sie die gewünschte Verarbeitung in dem obigen Ausdruck zum Verstehen von Listen.

l_square = [i**2 for i in l]
print(l_square)
# [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25]

l_str = [str(i) for i in l]
print(l_str)
# ['-5', '-4', '-3', '-2', '-1', '0', '1', '2', '3', '4', '5']

Damit können Sie zwischen Listen von Zahlen und Listen von Zeichenketten konvertieren.

Extrahieren und Löschen von Elementen aus der Liste, die die Kriterien erfüllen

Wenn das Element nur durch einen bedingten Ausdruck ausgewählt werden soll, wird es nicht durch einen Ausdruck verarbeitet, so dass es die folgende Form hat

[variable name for variable name in original list if conditional expression]

Es wird eine neue Liste erstellt, aus der nur Elemente extrahiert werden, die die Bedingung erfüllen (Elemente, für die der bedingte Ausdruck wahr ist).

l_even = [i for i in l if i % 2 == 0]
print(l_even)
# [-4, -2, 0, 2, 4]

l_minus = [i for i in l if i < 0]
print(l_minus)
# [-5, -4, -3, -2, -1]

Wenn “if conditional expression” auf “if not conditional expression” gesetzt wird, wird es zu einer Negation, und nur Elemente, die die Bedingung nicht erfüllen (Elemente, für die der bedingte Ausdruck falsch ist), können ausgewählt und extrahiert werden. Mit anderen Worten: Es wird eine neue Liste erstellt, aus der die Elemente, die die Bedingung erfüllen, entfernt werden.

l_odd = [i for i in l if not i % 2 == 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if not i < 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

Das gleiche Ergebnis erhält man natürlich auch, wenn man den entsprechenden bedingten Ausdruck ohne not angibt.

l_odd = [i for i in l if i % 2 != 0]
print(l_odd)
# [-5, -3, -1, 1, 3, 5]

l_plus = [i for i in l if i >= 0]
print(l_plus)
# [0, 1, 2, 3, 4, 5]

Der Teil des bedingten Ausdrucks kann aus mehreren Bedingungen bestehen. Negative nots können ebenfalls verwendet werden.

l_minus_or_even = [i for i in l if (i < 0) or (i % 2 == 0)]
print(l_minus_or_even)
# [-5, -4, -3, -2, -1, 0, 2, 4]

l_minus_and_odd = [i for i in l if (i < 0) and not (i % 2 == 0)]
print(l_minus_and_odd)
# [-5, -3, -1]

Ersetzen oder Umwandeln von Elementen, die die Bedingungen der Liste erfüllen

Im obigen Beispiel der Elementextraktion wurden Elemente, die die Bedingungen nicht erfüllten, entfernt.

Wenn Sie Substitutionen, Konvertierungen usw. nur an Elementen vornehmen wollen, die die Bedingungen erfüllen, wenden Sie den ternären Operator auf den Ausdrucksteil der Listenauffassungsnotation an.

In Python kann der ternäre Operator wie folgt geschrieben werden

True Value if Conditional Expression else False Value
a = 80
x = 100 if a > 50 else 0
print(x)
# 100

b = 30
y = 100 if b > 50 else 0
print(y)
# 0

Es ist ein bisschen kompliziert, aber die Kombination aus Listenauffassungsnotation und ternären Operatoren ist wie folgt.

[True Value if Conditional Expression else False Value for any variable name in original list]

Der in Klammern eingeschlossene Teil ist der ternäre Operator (Klammern sind im eigentlichen Code nicht erforderlich).

[(True Value if Conditional Expression else False Value) for any variable name in original list]

Wenn ein Variablenname für wahre oder falsche Werte geschrieben wird, wird der Wert des ursprünglichen Elements unverändert verwendet. Wenn ein Ausdruck geschrieben wird, wird die Verarbeitung dieses Ausdrucks angewendet.

l_replace = [100 if i > 0 else i for i in l]
print(l_replace)
# [-5, -4, -3, -2, -1, 0, 100, 100, 100, 100, 100]

l_replace2 = [100 if i > 0 else 0 for i in l]
print(l_replace2)
# [0, 0, 0, 0, 0, 0, 100, 100, 100, 100, 100]

l_convert = [i * 10 if i % 2 == 0 else i for i in l]
print(l_convert)
# [-5, -40, -3, -20, -1, 0, 1, 20, 3, 40, 5]

l_convert2 = [i * 10 if i % 2 == 0 else i / 10 for i in l]
print(l_convert2)
# [-0.5, -40, -0.3, -20, -0.1, 0, 0.1, 20, 0.3, 40, 0.5]