Python: Warum ist der Vergleich zwischen Listen und Tupeln nicht unterstützt?
Beim Vergleich der ein Tupel mit einer Liste wie ...
>>> [1,2,3] == (1,2,3)
False
>>> [1,2,3].__eq__((1,2,3))
NotImplemented
>>> (1,2,3).__eq__([1,2,3])
NotImplemented
... Python nicht tief-vergleichen wie mit (1,2,3) == (1,2,3)
.
Also, was ist der Grund dafür? Ist es, weil der veränderliche Liste kann jederzeit geändert werden (thread-Sicherheit) oder was?
(Ich weiß, wo das implementiert ist im CPython, also bitte keine Antwort wo, aber warum es umgesetzt wird.)
- Eine Liste ist nicht ein Tupel und Umgekehrt. Sie sind verschiedene Typen.
[] == ()
zurückFalse
. - Siehe auch: stackoverflow.com/questions/12135264/...
InformationsquelleAutor AndiDog | 2010-02-26
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie immer "cast" es
Beachten Sie, dass Python, im Gegensatz zu beispielsweise Javascript, stark eingegeben, und einige (die meisten?) uns ist es lieber so.
Es gibt keinen technischen Grund für Listen, die nicht in der Lage zu vergleichen, um Tupel; es ist ausschließlich eine design-Entscheidung, getrieben von Semantik. Für den Nachweis, dass es nicht mit thread-safety, die Sie vergleichen können, Listen in andere Listen:
Scheint es vernünftig, um Benutzern zu erlauben, direkt zu vergleichen, Listen und Tupel, aber dann am Ende mit anderen Fragen: soll dem Benutzer erlaubt werden, zu vergleichen, Listen und queues? Was ist es zwei Objekte, die Iteratoren? Was ist mit den folgenden?
Kann es kompliziert werden ziemlich schnell. Die Sprache, die Designer erkannten das Problem, und vermieden es, indem Sie einfach die Vermeidung von verschiedenen collection-Typen von vergleichen direkt mit jedem anderen1.
Beachten Sie, dass die einfache Lösung (zum erstellen einer neuen Liste von Tupel und vergleichen) ist einfach, aber ineffizient. Wenn Sie arbeiten mit einer großen Anzahl von Elementen, sind Sie besser dran mit so etwas wie:
Dies hat den Vorteil, die Arbeit auf zwei Sequenzen, in einem offensichtlichen Kosten in Komplexität.
1 I Hinweis: es gibt eine Ausnahme für Gruppen und frozensets. Und ohne Zweifel ein paar andere, die ich bin mir nicht bewusst. Die Sprache, die Designer sind Puristen, außer wo es sich lohnt, um praktisch zu sein.