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?
Antwort
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/
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
"^" 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 –
@TimPeters - Cool. Sag Raymond, dass er weitermachen soll ;-). Auf jeden Fall bin ich mir ziemlich sicher, dass OP das hier nicht wirklich will ... – mgilson
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. –
- 1. Warum gibt es keinen Kompilierungsfehler?
- 2. Warum gibt es keinen Operator << für std :: unique_ptr?
- 3. Warum gibt es keinen genauen C++ - Decompiler?
- 4. Warum gibt es keinen Microsoft.Win64-Namespace?
- 5. Warum gibt es hier keinen erreichbaren Code?
- 6. Warum gibt es keinen boost :: copy_on_write_ptr?
- 7. Warum gibt es keinen 'channel originate' Anruf?
- 8. Warum gibt es keinen std :: copy_if Algorithmus?
- 9. Warum gibt es keinen Blick! Funktion für clojure transiente Vektoren?
- 10. Warum gibt es keinen Reservierungskonstruktor für std :: string?
- 11. Warum gibt es keinen Cursor-Adapter für RecyclerView?
- 12. warum gibt es keinen finden für Vektor in C++
- 13. Warum gibt es keinen Operator [] für eine std :: list?
- 14. Warum gibt es keinen [] Operator für std :: shared_ptr?
- 15. Warum gibt es keinen Funktionstry-Block für Lambda?
- 16. Haskell: Warum gibt es keinen Typunterschied (und warum kompiliert er)?
- 17. Gibt es keinen Unterschied zwischen Funktion und Objekten in Javascript?
- 18. Python 3.0.1 collections.Counter
- 19. Warum gibt es keinen AtomicBooleanArray-Datentyp in Java?
- 20. Warum gibt es keinen Oracle Forms oder Reports Decompiler? (Technisch)
- 21. Warum gibt es keinen CSS-ähnlichen GUI-Ersteller
- 22. Warum gibt es keinen Autorelease-Pool, wenn ich performanceSelectorInBackground :?
- 23. Warum gibt es keinen E_NOTICE Fehler beim ersten Anruf?
- 24. Warum gibt es keinen Varchar-Datentyp in DynamicReports
- 25. Warum java.util.Set enthält keinen Wert Getter? Gibt es Alternativen dazu?
- 26. Warum gibt es in F # keinen geschützten Zugriffsmodifikator?
- 27. Warum gibt es keinen List-Konstruktor, der Varargs verwendet?
- 28. Warum gibt es keinen ArrayList (T [] t) -Konstruktor?
- 29. Warum sagt Neo4J mir, dass es keinen Löffel gibt?
- 30. Warum gibt es keinen ": n-ten-Klasse" Selektor im Standard?
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 ;-) –