Ich habe es geschafft, einen Ansatz zu finden map, der noch nicht gegeben wurde
tl; dr
def all_none(l):
return not any(map(None.__ne__, l))
all_none([None, None, None])
all_none([None, None, 8])
Erläuterung
Die Verwendung von None.__ne__ist etwas seltsamer als man auf den ersten Blick erwarten würde. Diese Methode gibt ein NotImplementedTypeObjekt zurück, wenn etwas angegeben wird, das nicht None ist.
Sie würden hoffen, dass NotImplementeddies ein FalseErsatz sein würde , aber es ist auch wahr! Dies bedeutet, dass die Verwendung None.__eq__in einer Sammlung für alles Thruthy-Werte erzeugt.
list(map(None.__eq__, [None, None, 8]))
all(list(map(None.__eq__, [None, None, 8])))
Aus den Python-Dokumenten :
Standardmäßig wird ein Objekt als wahr betrachtet, es sei denn, seine Klasse definiert entweder eine bool () -Methode, die False zurückgibt, oder eine len () -Methode, die Null zurückgibt
Stattdessen None.__ne__gibt Falsefür alle NoneElemente, und ein
NotImplementedTypeObjekt für etwas anderes:
list(map(None.__ne__, [None, None, 8]))
Mit diesem können Sie überprüfen , ob anyElemente nicht , Nonedie angezeigt werden können True. Ich stelle mir das gerne als zwei getrennte Methoden vor, wenn das bei der mentalen Negationsgymnastik hilft.
def contains_truthy(l):
return any(map(None.__ne__, l))
def all_none(l):
return not contains_truthy(l)
Ich habe damit kein Benchmarking durchgeführt, aber wie von anderen in diesem Thread erwähnt, not anywerden schnelle Ergebnisse erzielt.