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

>>> 3

如果返回所有不等于的值,为什么返回3而不是返回?6bool(i)Truei0

4

2 回答 2

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

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

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

TrueFalse是 的实例bool,并且bool是 的子类int

文档

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

于 2012-10-07T00:58:08.587 回答
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))
于 2012-10-07T01:33:55.393 回答