Haben Python-Listen eine Entsprechung für __contains__, die auf Identität testet?

8

Für die integrierten Python-Container ( list , tuple usw.) entspricht der in -Operator any(y == item for item in container) mit der Einschränkung, dass die frühere Methode schneller (und hübscher) ist:

%Vor%

Gibt es ein Äquivalent zu any(y is item for item in container) ? Das heißt, ein Test, der is anstelle von == verwendet?

    
ChrisB 15.08.2012, 14:35
quelle

1 Antwort

6
Nein, da ist es nicht. Der Operator is wird gerade nicht benötigt, um zu rechtfertigen, dass eine C-optimierte Methode beibehalten werden muss und der Python-API Verwirrung zugefügt wird.

Der in Test für Listen und Tupel führt eine vollständige Suche ähnlich wie any durch, wenn auch in C, btw. In Mengen verwendet der Test jedoch den effizienten Speicheralgorithmus, der dem Container zugrunde liegt, und die Suche benötigt im erwarteten Fall konstante Zeit. Für Sätze und Mappings sollten Schlüssel einen stabilen Hash haben, was in den meisten Fällen bedeutet, dass is wirklich nicht benötigt wird.

Die korrekte Schreibweise lautet also:

%Vor%     
Martijn Pieters 15.08.2012, 14:38
quelle

Tags und Links