[1, 1, 1, 2, 2, 3].count(True)
>>> 3
すべての値が等しくない場合に返されるのに、なぜこれが3
の代わりに返されるのですか?6
bool(i)
True
i
0
[1, 1, 1, 2, 2, 3].count(True)
>>> 3
すべての値が等しくない場合に返されるのに、なぜこれが3
の代わりに返されるのですか?6
bool(i)
True
i
0
In [33]: True == 1
Out[33]: True
In [34]: True == 2
Out[34]: False
In [35]: True == 3
Out[35]: False
True
とFalse
はのインスタンスでありbool
、bool
のサブクラスですint
。
ドキュメントから:
[ブール値]は、真理値FalseおよびTrueを表します。値FalseとTrueを表す2つのオブジェクトは、唯一のブールオブジェクトです。ブール型はプレーン整数のサブタイプであり、ブール値は、ほとんどすべてのコンテキストで、それぞれ値0および1のように動作します。ただし、文字列に変換すると、文字列「False」または「True」が返されます。それぞれ。
これは、次の理解を使用して行う方が適切です。
>>> sum(1 for i in [1,1,1,2,2,3,0] if i)
6
また
sum(bool(i) for i in [1,1,1,2,2,3,0])
または、逆に数えます。False は 0 以外であることは明らかです。
>>> li=[1, 1, 1, 2, 2, 3, 0]
>>> len(li) - li.count(False)
6
さらに良い:
sum(map(bool,li))