if all([0, 4, "Sample string"]):
print "Yes"
else:
print "No"
Es druckt immer Nein trotz der iterable mit allen Werten. Ich kann nicht verstehen, was es falsch auswertet.Warum wird der folgende Code als falsch bewertet?
if all([0, 4, "Sample string"]):
print "Yes"
else:
print "No"
Es druckt immer Nein trotz der iterable mit allen Werten. Ich kann nicht verstehen, was es falsch auswertet.Warum wird der folgende Code als falsch bewertet?
Ihr iterabler Wert enthält 0
und 0 ergibt False
.
In Python ist die ganze Zahl 0 gleich Falsch.
True, aber 'all()' kümmert sich nicht um Gleichheit. 'None' ist nicht gleich' False', noch sind '0.0' oder'() 'oder' [] ', aber alle diese Werte * werden in einem Booleschen Kontext * als falsch getestet, was hier von Bedeutung ist. –
all()
gibt true zurück, wenn alle Werte wahr sind, die function documentation sehen: sind
Return
True
wenn alle Elemente des iterable wahr (oder wenn das iterable leer ist).
0
ist kein echter Wert:
>>> bool(0)
False
Siehe Truth Value Testing section der Python-Standardtypen Dokumentation:
Folgende Werte werden als falsch:
[.. .]
- Null eines beliebigen numerischen Typs, z. B. 0, 0.0, 0j.
Um zu überprüfen, ob das Array Booleschen Wert „False“ überall enthält (wie ich denke, Sie zu tun hatte beabsichtigt), tun einfach:
if all(map(lambda v: v is not False, [0, 4, "Sample string"])):
print "Yes"
else:
print "No"
Ich wollte eigentlich überprüfen, ob alle Werte vorhanden sind, d. H. "Nicht null", also ist 0 ein akzeptabler Wert. Obwohl ich vergessen hatte, dass es gleich einem booleschen False sein wird. –
'0' ist kein echter Wert. –
Dank @MartijnPieters –