Wie kann man die Mitgliedschaft mehrerer Werte in einer Python-Liste effizient testen: Iterieren, Sets oder all()?

Linda Hamilton
Freigeben: 2024-10-30 11:45:05
Original
359 Leute haben es durchsucht

How to Efficiently Test Membership of Multiple Values in a Python List: Iterating, Sets, or 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'])
Nach dem Login kopieren

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']))
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage