[python] Rückgabe boolean wenn gesetzt ist leer



Answers

nicht so pythisch wie die anderen Antworten, sondern Mathematik:

return len(c) == 0
Question

Ich habe Mühe, einen saubereren Weg zu finden, um einen booleschen Wert zurückzugeben, wenn mein Satz am Ende meiner Funktion leer ist

Ich nehme die Schnittmenge zweier Mengen und möchte auf der Basis von True oder False , wenn die resultierende Menge leer ist.

def myfunc(a,b):
    c = a.intersection(b)
    #...return boolean here

Mein erster Gedanke war zu tun

return c is not None

In meinem Interpreter kann ich jedoch leicht erkennen, dass diese Aussage wahr zurückgibt, wenn c = set([])

>>> c = set([])
>>> c is not None
True

Ich habe auch alles ausprobiert:

>>> c == None
False
>>> c == False
False
>>> c is None
False

Jetzt habe ich aus der Dokumentation gelesen, dass ich nur verwenden kann, and / or not mit leeren Mengen, um einen booleschen Wert abzuleiten. Bis jetzt ist das einzige, was ich mir vorstellen kann, nicht c zurückzukehren

>>> not not c
False
>>> not c
True

Ich habe das Gefühl, dass es einen viel pythischeren Weg gibt, dies zu tun, indem ich darum kämpfe, es zu finden. Ich möchte nicht die tatsächliche Menge auf eine if-Anweisung zurückgeben, weil ich die Werte nicht brauche, ich möchte nur wissen, ob sie sich schneiden.




Nicht so sauber wie Bool (c), aber es war eine Ausrede, um Ternär zu verwenden.

def myfunc(a,b):
    return True if a.intersection(b) else False

Auch wenn Sie ein bisschen dieselbe Logik verwenden, müssen Sie c nicht zuweisen, es sei denn, Sie verwenden es für etwas anderes.

def myfunc(a,b):
    return bool(a.intersection(b))

Schließlich würde ich annehmen, dass Sie einen True / False-Wert wünschen, weil Sie damit einen booleschen Test durchführen wollen. Ich würde empfehlen, den Overhead eines Funktionsaufrufs und einer Definition zu überspringen, indem Sie einfach testen, wo Sie sie benötigen.

Anstatt von:

if (myfunc(a,b)):
    # Do something

Vielleicht das:

if a.intersection(b):
    # Do something



Wenn Sie für eine leere Menge return True wollen, dann wäre es klarer, dies zu tun:

return c == set()

dh " c ist gleich einer leeren set ".

(Oder umgekehrt return c != set() ).

Meiner Meinung nach ist dies expliziter (wenn auch weniger idiomatisch), als sich darauf zu verlassen, dass Python eine leere Menge in einem booleschen Kontext als False interpretiert.




Related