Warum ist '+' nicht verstanden Python-sets?
Ich würde gerne wissen, warum das gültig ist:
set(range(10)) - set(range(5))
aber dieser ist nicht gültig:
set(range(10)) + set(range(5))
Ist es, da '+' könnte bedeuten, dass beide intersection und union?
|
bedeutet union. Was Fragen Sie?- Es ist, weil Guido wählte einen anderen Betreiber für das intersection und union.
- Heffernan, Guido Regel nicht Dinge tun, ohne einen Grund oder zumindest einen Leitsatz - das ist, was macht Python so toll.
- Oh, ich bin ganz sicher, er Tat es aus einem guten Grund.
- Wenn nur
~
waren ein binärer operator, dann könnten Sie|
für + union und~
für die Differenz, die ist viel ausgeglichener.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Python-sets nicht haben eine Implementierung für die
+
Betreiber.Können Sie
|
für setzen union und&
für set-Kreuzung.Sets implementieren
-
wie Unterschied. Sie können auch^
für die symmetrischen Satz Unterschied (d.h., es gibt eine neue Reihe mit nur die Objekte angezeigt, die in einem Satz erscheinen aber nicht in beiden Mengen).Python verwenden möchten
|
statt+
da set union ist ein Konzept, das eng verknüpft mit Boolesche Disjunktion; Bit-Vektoren (die in python sind nurint
/long
) definieren diesen Vorgang über eine Sequenz von booleschen Werten und nennen es "Bitweises oder". In der Tat, dieser Vorgang ist so ähnlich wie die union festgelegt, die binäre zahlen werden manchmal auch als "Bit-Sätze", wo die Elemente in dem Satz getroffen werden, um die natürlichen zahlen.Weil
int
bereits definiert Satz-wie als Betreiber|
,&
und^
, war es natürlich für die neuereset
Art zu verwenden, die die gleiche Schnittstelle.In Mengenlehre auf das symbol + in der Regel angibt, die disjunkte union von zwei Sätzen. Wenn A und B sind Sätze, deren disjunkte union definiert werden, die festlegen,
d.h., zur Konstruktion der disjunkten union, markieren wir alle Elemente von A und alle Elemente von B mit verschiedenen tags (im Beispiel habe ich die zahlen 1 und 2, aber zwei verschiedene "Dinge" tun würde den job) und dann nehmen Sie die union der beiden resultierenden sets. In dem obigen Beispiel, das ich verwendet habe, 'U' für set union zu machen, mehr vergleichbar mit der üblichen mathematischen notation; unten habe ich mit der Python-notation, z.B. " | " für union, und '&' für die Kreuzung.
Wenn A und B disjunkt sind, A + B ist eine 1-zu-1-Entsprechung mit A | B. Wenn Sie nicht sind, dann sind alle gemeinsamen Elemente x, die in A & B zweimal in A + B: einmal als (x, 1), und einmal als (x, 2).
So, da das ' + ' - symbol hat eine sehr gut etablierte Bedeutung als mengenoperation, ich finde es sehr konsequent, dass Python nicht verwendet dieses symbol für set union oder Kreuzung. Wahrscheinlich Python-designer(s) hatte dies im Sinn, als Sie wählte, set-Operatoren.
|
Betreiber setzen die Gewerkschaften aber nicht zu verstehen, warum Guido vermieden überlastung der+
Betreiber für set Gewerkschaften als gut. Nachdem alle so tun würde bewahrt haben, Orthogonalität mit der+
operator überladen Liste für Ergänzungen. Da Python ' s Markenzeichen ist die übereinstimmung mit der mathematischen notation (z.B.j
bezeichnet die komplexe Komponente der komplexen zahlen), Guido neugierig, Wahl endlich Sinn macht.Sicher, Sie hätte
+
zu tun, eine Gewerkschaft zu Gründen, aber dann müsste noch ein symbol für Schnittmenge.|
für die union ist symmetrisch mit&
für Kreuzung und macht somit die bessere Wahl.Weil
|
bedeutet, dass union und&
bedeutet Kreuzung. Es gibt eindeutig keinen Grund Sie mehrere Operatoren für die gleiche Funktion.Die Gründe für die Verwendung
|
und&
wahrscheinlich geht zurück auf bitweise Operationen. Wenn Sie sind wie die bits in einer Zahl, das sind die Operatoren, die Sie verwenden würden, zu tun, union und intersect.+
einfach nicht so gebunden an die union und die-
zu setzen, ist Unterschied.Weil Unterschied zwischen ist eine sehr nützliche und allgemein bekannten Konzept, aber es gibt keine (allgemein gebräuchliche) Begriff der „set hinzufügen“.
+
ist definiert als Mitglied-Weise neben. Einige nutzen Sie für symmetrische Differenz. So oder so, kein Papier, in dem es verwendet entweder ruft es etwas anderes oder legt es zuerst.