Heim > Artikel > Backend-Entwicklung > Wie kann man die Mitgliedschaft mehrerer Werte in einer Python-Liste effizient testen: Iterieren, Sets oder all()?
Testen der Mitgliedschaft mehrerer Werte in einer Liste durch Iteration
Pythons Verhalten beim Testen mehrerer Werte auf Mitgliedschaft in einer Liste kann verwirrend sein. Die Verwendung von 'a','b' in ['b', 'a', 'foo', 'bar'] gibt ('a', True) zurück und gibt an, dass das Ergebnis ein Tupel ist, bei dem das erste Element der erste Wert ist überprüft und das zweite Element ist die Zugehörigkeit zu diesem Wert. Um die Mitgliedschaft mehrerer Werte in einer Liste zu testen, wird der folgende Ansatz empfohlen:
all(x in ['b', 'a', 'foo', 'bar'] for x in ['a', 'b'])
Diese Anweisung verwendet einen Generatorausdruck innerhalb der all()-Funktion, um jeden Wert in der zweiten Liste auf Mitgliedschaft in zu testen die erste.
Alternative Ansätze
Während die iterationsbasierte Methode im Allgemeinen zuverlässig ist, gibt es alternative Ansätze. Die Verwendung von Sets bietet eine Testoption für Teilmengen:
set(['a', 'b']).issubset(set(['a', 'b', 'foo', 'bar']))
Sets können jedoch nur hashbare Elemente enthalten, was ihre Anwendung einschränkt.
Geschwindigkeitsüberlegungen
Der Teilmengentest ist im Allgemeinen schneller, der Unterschied ist jedoch nur dann signifikant, wenn sowohl der Container als auch die Elemente klein sind. In den meisten Fällen ist die Verwendung der all()-Funktion immer noch effizient.
Wenn sich die Elemente bereits in einer Liste befinden, kann die Konvertierung in eine Menge vor der Verwendung des Teilmengentests eine leichte Beschleunigung bewirken. Das Konvertieren eines Containers, der kein Set ist, in einen Set wird nicht empfohlen, da die Beschleunigung minimal ist und der zusätzliche Speicheraufwand problematisch sein kann.
Ausnahmefälle
Wann Beim Testen der Zugehörigkeit einer großen Anzahl von Werten, insbesondere wenn sich einige nicht im Container befinden, kann all() einen erheblichen Geschwindigkeitsvorteil gegenüber dem Teilmengentest bieten. Dies ist auf sein Kurzschlussverhalten zurückzuführen, das es ihm ermöglicht, Testelemente zu umgehen, die nicht im Behälter vorhanden sind.
Zusammenfassung
Für den allgemeinen Gebrauch, die Konvertierung der Das Hinzufügen eines Containers zu einem Satz wird empfohlen, wenn seine Elemente hashbar sind. Der Subset-Test ist nur dann von Vorteil, wenn die Testitems bereits in einem Set gespeichert sind. In bestimmten Situationen, beispielsweise beim Testen der Zugehörigkeit einer großen Anzahl von Werten, bietet all() eine überlegene Leistung.
Das obige ist der detaillierte Inhalt vonWie kann man die Mitgliedschaft mehrerer Werte in einer Python-Liste effizient testen: Iterieren, Sets oder all()?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!