Vergleicht man alle Elemente der beiden Tupel (mit dem all () - Funktion)
Also ich weiß, dass Vergleiche auf Tupeln Arbeit lexikographisch:
Tupeln und Listen werden lexikographisch verglichen mit Vergleich der entsprechenden Elemente. Dies bedeutet, dass zum vergleichen gleich, jedes element muss vergleichen Sie gleich und die beiden Sequenzen müssen den gleichen Typ und die gleiche Länge haben.
Wenn nicht gleich, die Sequenzen sind bestellt die gleiche wie Ihre erste unterschiedliche Elemente. Zum Beispiel, cmp - ([1,2,x], [1,2,y]) liefert das gleiche wie cmp(x,y). Wenn das entsprechende element nicht vorhanden ist, wird die kürzere Sequenz ist bestellt erste (z.B. [1,2] < [1,2,3]).
So aus:
>>> a = (100, 0)
>>> b = (50, 50)
>>> a > b
True
Aber ich will vergleichen Sie alle Elemente 2-Tupel in der Reihenfolge, so funktional ich möchte so etwas wie (mit den Werten von oben):
>>> a > b
(True, False) #returned tuple containing each comparison
>>> all(a > b)
False
Als ein Beispiel aus der Praxis, für etwas wie Bildschirm-Koordinaten, wenn Sie wollte, um zu überprüfen, ob etwas 'in' der Bildschirm bei (0,0), aber ein Vergleich wie coord > (0,0), wenn die x-coord, war größer als 0, aber die y-coord kleiner war, würde es noch immer true zurück, das ist nicht das, was notwendig ist in diesem Fall.
Als eine Art sub-Frage/Diskussion:
Ich bin nicht sicher, warum vergleicht man 2-Tupel der verschiedenen Werte, die zurückgegeben wird, in einer Weise. Sie sind nicht gegeben, jede Art von index, so dass die einzige Sache, die Sie erhalten aus dem Vergleich ein Tupel (, dass ist nicht das testen der Gleichheit) ist, dass irgendwann in der die Tupel, einer der Vergleiche werden werfen Sie einen true-oder false-Wert, wenn Sie nicht gleich sind. Wie könnte man Sie nutzen?
(3, 1, 4, 2) < (3, 2, 0, 1)
und Dinge wie, dassInformationsquelleAutor Joe Staines | 2012-04-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie erreichen dies mit einer Liste zu erfassen und Reißverschluss built-in:
Können Sie all() oder any() auf das zurückgegebene Liste.
all
oderany
dann müssen Sie nicht mehr eine Liste Verständnis, aber kann sich mit einem generator, die Ihnen ermöglicht, drop das zusätzliche paar Klammern durch die spezielle syntax-Regel.InformationsquelleAutor garnertb
Ersetzen
a > b
mittuple(i > j for i, j in zip(a,b))
in deinem zweiten code-Beispiel.InformationsquelleAutor Dan D.
Könnten Sie in Erwägung ziehen, die folgenden vektorisiert Ansatz, die in der Regel mehr leistungsfähige, und syntaktisch/semantisch sehr klar:
numpy ist sehr performant, und die daraus resultierenden oben genannten Gegenständen auch einbetten, die alle()/all() query-Methoden, die Sie möchten. Wenn Sie ausführen werden Vektor-ähnliche Vorgänge (wie Ihr Bildschirm-Koordinaten Beispiel zeigt), können Sie erwägen, die Arbeit mit 'a' und 'b' als numpy-arrays anstelle von Tupeln. Dass die Ergebnisse in die effiziente Umsetzung von dem, was Sie suchen: kein pre-Konvertierung erforderlich, und Python-basierte Schleifen ersetzt werden, mit effizienten numpy-basiert Schleifen. Dies ist hervorzuheben, weil es zwei und möglicherweise drei loops beteiligt: (1) eine Vorverarbeitung der Schleife während der Konvertierung (die kann man beseitigen); (2) ein item-by-item-Vergleich loop; und (3) eine Abfrage-Schleife, um zu beantworten alle Frage.
Beachten Sie, dass ich könnte haben auch ein numpy-array aus 'b', aber nicht so tun, beseitigt die Konvertierung Schritt und pre-processing Zeit. Seit dieser Ansatz führt zu einer der Operanden ein numpy-array und der andere ein Tupel, wie die Sequenzen wachsen, das kann/darf-nicht weniger schnelle item-by-item-Vergleiche (die strenge numpy-numpy ist gut). Versuchen Sie es. 🙂
InformationsquelleAutor NYCeyes
Ich spürte, wie die Verwendung von map und lambda-Funktionen fehlten, wurde aus den Antworten
InformationsquelleAutor pyvkd
Um das oben beschriebene Verhalten, versuchen:
Dem Grund, dass Vergleiche von Tupeln zurückgegeben werden, in diesem Weg, möchten Sie vielleicht etwas schreiben wie:
Wenn Python wurden die Rückkehr der Tupel, die Sie beschreiben, dann die sonst nie passieren. Versuchen
Ich hoffe, das hilft.
InformationsquelleAutor Ken