如何在 Python 中计算整数列表中的 True 值?



有人可以解释为什么在循环for in l5中我得到了 2 个 True 值,但从l5.count(True)中我只得到了 1 个??为什么l5.count(not 0)只返回 1?

我知道其他方法来获得我需要的东西:过滤器 + lambda 或总和 + for + if,但我试着理解它:)

在 Python 控制台的部分下,我已经问过了。

Python 3.9.0 (tags/v3.9.0:9cf6752, Oct 5 2020, 15:34:40) [MSC v.1927 64 位 (AMD64)] 在 win32

'''
l5 = [0, 0, 0, 1, 2]
l5.count(True)
Out[3]: 1
for x in l5:
print(x, bool(x))

0 False
0 False
0 False
1 True
2 True
l5.count(0)
Out[5]: 3
l5.count(not 0)
Out[6]: 1
l5.count(not False)
Out[7]: 1

'''

python中的False在数值上等于0True在数值上等于1

因此not False将等于True在数值上等于1

l5 = [0, 0, 0, 1, 2]
l5.count(True) # is equivalent to l5.count(1)
Out[3]: 1
l5.count(not 0) # is equivalent to l5.count(1)
Out[6]: 1
l5.count(not False) # is equivalent to l5.count(1)
Out[7]: 1

l5.count(False) # is equivalent to l5.count(0)
Out[8]: 3

当你做l5.count(True)

内部python使用列表中的每个元素进行检查l5

0==True ?
0==True ?
0==True ?
1==True ?
2==True ?

现在Truebool类型而其他类型是int的,python 会从boolint进行隐式类型转换(因为做比较类型应该是相同的)

因此,True在数值上等价于1

Count=0
0==1 ? No
0==1 ? No
0==1 ? No
1==1 ? Yes; Count += 1 
2==1 ? No
Final output : 1

现在这是从boolint的类型转换

在从intbool的转换中:

0被视为False和除0、-1,-2,-3以外的所有内容,...1,2,3,.. 被视为True

等等

>>> bool(-1)
True
>>> bool(1)
True
>>> bool(2)
True
>>> bool(0)
False
>>> not 2
False
# as 2 is equivalent to True and "not True" is False

您可以在此处阅读有关此内容的更多信息

相关内容

  • 没有找到相关文章

最新更新