count()方法中的布尔转换整数

时间:2012-10-07 00:57:33

标签: python

[1, 1, 1, 2, 2, 3].count(True)

>>> 3

如果所有值3不等于6bool(i)返回True,为什么会返回i而不是0?< / p>

2 个答案:

答案 0 :(得分:3)

In [33]: True == 1
Out[33]: True

In [34]: True == 2
Out[34]: False

In [35]: True == 3
Out[35]: False

TrueFalsebool的实例,boolint的子类。

来自the docs

  

[布尔]代表真假值False和True。这两个对象   表示值False和True是唯一的布尔对象。   布尔类型是普通整数的子类型,布尔值   在几乎所有上下文中,它们的行为分别类似于值0和1 ,   例外情况是转换为字符串时的字符串   分别返回“False”或“True”。

答案 1 :(得分:2)

通过理解可以做得更好:

>>> 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))