Warum die union () nicht alle Elemente enthält
Die 1
und True
sind äquivalent und gelten als Duplikate. Ebenso sind die 0
und False
gleichwertig:
>>> 1 == True
True
>>> 0 == False
True
Welcher äquivalente Wert wird verwendet?
Wenn mehrere äquivalente Werte gefunden werden, behalten die Sätze den ersten gesehen:
>>> {0, False}
{0}
>>> {False, 0}
{False}
Möglichkeiten, die Werte zu unterscheiden
Um sie als unterschiedlich zu behandeln, speichern Sie sie einfach in einem (value, type)
Paar:
>>> set1 = {(1, int), (2, int), (3, int)}
>>> set2 = {(True, bool), (False, bool)}
>>> set1 | set2
{(3, <class 'int'>), (1, <class 'int'>), (2, <class 'int'>),
(True, <class 'bool'>), (False, <class 'bool'>)}
>>> set1 & set2
set()
Eine andere Möglichkeit, die Werte zu unterscheiden, besteht darin, sie als Zeichenfolgen zu speichern:
>>> set1 = {'1', '2', '3'}
>>> set2 = {'True', 'False'}
>>> set1 | set2
{'2', '3', 'False', 'True', '1'}
>>> set1 & set2
set()
Hoffe das klärt das Rätsel und zeigt den Weg nach vorne :-)
Aus den Kommentaren gerettet:
Dies ist die Standardtechnik zum Brechen Quer Typ Äquivalenz (dh 0.0 == 0
, True == 1
, und Decimal(8.5) == 8.5)
. Die Technik regelmäßig in Python 2.7 ist an Kraft Unicode Regexes Ausdruck Modul verwendet wird , deutlich von ansonsten äquivalenter str Regexes zwischengespeichert wird. Die Technik wird auch verwendet in Python 3 für functools.lru_cache (), wenn der eingegebene Parameter wahr ist.
Wenn das OP etwas anderes als die Standardäquivalenzbeziehung benötigt, muss eine neue Beziehung definiert werden. Je nach Anwendungsfall kann dies die Groß- und Kleinschreibung für Zeichenfolgen, die Normalisierung für Unicode, das visuelle Erscheinungsbild (Dinge, die anders aussehen, werden als unterschiedlich angesehen), die Identität (keine zwei unterschiedlichen Objekte werden als gleich angesehen), ein Wert / Typ-Paar oder ein anderes sein Funktion, die eine Äquivalenzbeziehung definiert. In Anbetracht des spezifischen Beispiels des OP scheint es, dass er / sie entweder eine Unterscheidung nach Typ oder eine visuelle Unterscheidung erwartet hat.