2016-07-19 14 views
0

Also für Sätze können Sie eine symmetrische Differenz (^), die das Äquivalent von Union minus Schnittpunkt ist. Warum ist ein nicht unterstützter Operand für Counter-Objekte, während Vereinigung und Schnittpunkt noch funktionieren?Warum gibt es keinen symmetrischen Unterschied für Collections.Counter?

+0

Es gibt keine endgültige Antwort werden mußte. "Die übliche" Antwort auf Fragen wie diese ist, dass zum Zeitpunkt der Modulgestaltung niemand genug auf diesen speziellen Fall geachtet hat, um die Arbeit der Implementierung zu machen - und niemand kümmerte sich auch später genug darum ;-) –

Antwort

2

auf meinen Kommentar Aufweiten, Es stellt sich heraus, dass es zur rechten Zeit diskutiert und abgelehnt wurde.

Klicken Sie auf den Link für die vollständige Nachricht (und den Thread); Ich werde zitiere nur den „höherwertigen Bits“ von Raymond Hettinger Antwort:

Es ist unwahrscheinlich, dass ich diese [symmetrische Differenz] Methode, um die Zähler-API hinzugefügt werden, da die Seltenheit des Anwendungsfalles garantiert nicht die zugegebenen API-Komplexität. IMO, Hinzufügen einer Methode wie folgt macht die Klasse schwieriger zu lernen, verstehen und sich erinnern. Es scheint nicht, wie viel von einem Sieg über die bestehenden Alternativen erfüllen:

...

Ich mag jemand sehen, eine Unterklasse des ASPN Kochbuch schreiben, dass eine Reihe interessanter fügt hinzu, obwohl nicht übliche Operationen.

...

The Counter() Klasse hat eine geringe Bestrebungen. Es ist ein Dictionary, das fehlende Werte mit Null ausfüllt und um eine Handvoll grundlegende Methoden zur Verwaltung der Zählimpulse erweitert wird.

Voll Nachricht:

https://mail.python.org/pipermail/python-list/2010-August/585040.html

Es gibt auch ein Rezept in dem ASPN Kochbuch Implementierung __xor__ in einer Counter Unterklasse:

http://code.activestate.com/recipes/577362-extension-to-python-3-counter-class/

1

für Counter Objekte, & und | bedeuten nicht, Durchschnitt und Vereinigung, wie sie für Sätze tun ... meinen sie max und min.

Mehrere mathematische Operationen werden zum Kombinieren von Counter-Objekten zum Erzeugen von Multisets (Counter, die Counts größer als Null haben) bereitgestellt. Addition und Subtraktion kombinieren Zähler durch Addieren oder Subtrahieren der Zählerstände der entsprechenden Elemente. Schnittpunkt und Vereinigung geben das Minimum und Maximum der entsprechenden Zählungen zurück. Jede Operation kann Eingaben mit vorzeichenbehafteten Zählungen akzeptieren, aber die Ausgabe schließt Ergebnisse mit Zählwerten von null oder weniger aus.

Mit diesen Definitionen, was würde der Operator ^ bedeuten?

Wenn Sie die symmetrische Differenz der Schlüssel möchten, können Sie c1.viewkeys()^c2.viewkeys()


auf python3.x Verwenden Sie dazu .keys() statt

+0

"^" würde das Maximum minus der Min bedeuten, was sich auf die Operation "Nur-alt-gesetzt" reduziert, wenn die einzigen möglichen Multiplizitäten 0 und 1 sind. Das ist üblich, aber ich habe es sehr selten für Multisets verwendet. Hier ist eine Referenz in Übereinstimmung: https://oeis.org/wiki/Multisets#Generalized_set_operations –

+0

@TimPeters - Cool. Sag Raymond, dass er weitermachen soll ;-). Auf jeden Fall bin ich mir ziemlich sicher, dass OP das hier nicht wirklich will ... – mgilson

+0

Raymond wird nicht interessiert sein ;-) Aber ich würde wetten, dass die OP das im Hinterkopf hatte, da sie "is" geschrieben haben das Äquivalent von Union minus Kreuzung ". In diesem Sinne wird die symmetrische Differenz für Multi-Sets und einfache-alte-Sets auf dieselbe Weise definiert. –

Verwandte Themen