有人可以解释为什么在循环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
在数值上等于0
,True
在数值上等于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 ?
现在True
是bool
类型而其他类型是int
的,python 会从bool
到int
进行隐式类型转换(因为做比较类型应该是相同的)
因此,True
在数值上等价于1
:
Count=0
0==1 ? No
0==1 ? No
0==1 ? No
1==1 ? Yes; Count += 1
2==1 ? No
Final output : 1
现在这是从bool
到int
的类型转换
在从int
到bool
的转换中:
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
您可以在此处阅读有关此内容的更多信息