[1, 1, 1, 2, 2, 3].count(True)
>>> 3
Warum diese Rückkehr 3
statt 6
, wenn bool(i)
kehrt True
für alle Werte i
nicht gleich 0
?Integer zu boolean Umwandlung in count() -Methode
[1, 1, 1, 2, 2, 3].count(True)
>>> 3
Warum diese Rückkehr 3
statt 6
, wenn bool(i)
kehrt True
für alle Werte i
nicht gleich 0
?Integer zu boolean Umwandlung in count() -Methode
In [33]: True == 1
Out[33]: True
In [34]: True == 2
Out[34]: False
In [35]: True == 3
Out[35]: False
True
und False
sind Instanzen von bool
und bool
ist eine Unterklasse von int
.
Von the docs:
[Boolesche] die Wahrheit repräsentieren Werte wahr und falsch. Die beiden Objekte , die die Werte False und True darstellen, sind die einzigen booleschen Objekte. Der Boolean-Typ ist ein Subtyp der Ebene ganzer Zahlen, und Boolesche Werte verhalten sich wie die Werte 0 und 1 jeweils in fast allen Kontexten, der Ausnahme, dass, wenn in einen String umgewandelt, die Saiten „False“ oder "True" werden jeweils zurückgegeben.
Dies wird besser mit einem Verständnis getan:
>>> sum(1 for i in [1,1,1,2,2,3,0] if i)
6
oder
sum(bool(i) for i in [1,1,1,2,2,3,0])
Oder die entgegengesetzte Richtung zählen, da es keine Zweideutigkeit über False ist etwas anderes als 0
>>> li=[1, 1, 1, 2, 2, 3, 0]
>>> len(li) - li.count(False)
6
Besser noch:
sum(map(bool,li))
Ich hätte klarstellen müssen, dass es nicht Code war, den ich tatsächlich verwenden wollte - ich experimentierte nur mit dem Interpreter, fand Edge Cases und so. – FreeAsInGimme
@FreeAsInGimme: OK - naja, versuchen zu helfen ... –
Nein, nein, ich schätze die Eingabe. Je mehr ich lernen kann, desto besser. – FreeAsInGimme