Überprüfen, wenn nur eine variable in einer Liste von Variablen festgelegt ist
Ich bin auf der Suche nach einer einfachen Methode zu überprüfen, wenn nur eine variable in einer Liste von Variablen hat den Wert True.
Ich habe diese logische xor-post und versucht einen Weg zu finden, anzupassen, zu viele Variablen und nur eine wahr ist.
Beispiel
>>>TrueXor(1,0,0)
True
>>>TrueXor(0,0,1)
True
>>>TrueXor(1,1,0)
False
>>>TrueXor(0,0,0,0,0)
False
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es nicht gebaut, aber es ist nicht zu schwer zu Rollen, die Sie besitzen:
Da "[b]ooleans sind ein Subtyp von einfachen Ganzzahlen" (Quelle) können Sie die Summe der Liste von Ganzzahlen ist ganz einfach und du kannst auch echte booleans in dieser Funktion auch.
Also diese beiden Aufrufe sind homogen:
Wenn Sie wollen explicit boolean-Konvertierung:
sum( bool(x) for x in args ) == 1
.sum(bool(a) for a in args) == 1
-- die Variablen, die sich möglicherweise nicht Boolean.Ich denke, die Summe-basierten Lösung ist gut für das gegebene Beispiel, aber Bedenken Sie, dass Boolesche Prädikate in python immer der Kurzschluss-Auswertung. So möchten Sie vielleicht erwägen, etwas mehr im Einklang mit alle und jede.
not any(it)
funktioniert auf den rest der Elemente, die Links über dieany(it)
für Menschen, die nicht so komfortabel mit Iteratoren.Die Frage, die Sie im Zusammenhang mit bereits bietet die Lösung für zwei Variablen. Alles, was Sie tun müssen, zu verlängern, um die Arbeit auf n Variablen:
reduce
. Danke für den Hinweis it out.Hier mein einfacher Ansatz. Ich habe es umbenannt only_one seit xor mit mehr als einem Eingang ist in der Regel ein parity-checker, nicht eine "einzige" checker.
Testen: