[英]Why do these two loops return different results?
我有一个循环来计算两个琴弦之间的总汉明距离。
对于输入:
nums = [4,14,2]
循环的一种版本:
n, ans = len(nums), 0
for i in range(32):
bit, cnt = 1<<i, 0
for num in nums:
cnt += num & bit
ans += cnt * (n-cnt)
return ans
给出错误的结果:-84
而一个几乎相同的循环:
n, ans = len(nums), 0
for i in range(32):
bit, cnt = 1<<i, 0
for num in nums:
cnt += (num & bit) > 0
ans += cnt * (n-cnt)
return ans
给出正确答案6.我能弄清楚为什么?
第二个循环中的“> 0”有什么作用? 我试图通过一个简单的测试来了解它的作用:
>>> i = -5
>>> i += 1
>>> i
-4
>>> i = -5
>>> i += 1 > 0
>>> i
-4
而“> 0”似乎没有任何作用。 为什么两个循环不同?
这是因为一些num&bit
大于0,所以(即我的运行中有一个8
):
>>> a=8
>>> a>0
True
>>> int(a>0)
1
不是8
!!!
所以这就是为什么。
num & bit
与num & bit > 0
;
num & bit
是一个数字( int
),而num & bit > 0
是一个布尔值( bool
);
在python中,当用作数字时, True
布尔值为1
;
>>> i = -5
>>> i += 2
>>> i
-3
>>> i = -5
>>> i += 2 > 0
>>> i
-4
根据经验,请勿使用1
或0
测试; 用随机数进行测试( 2
也是不好的,但是在这里很容易阅读);
排队
cnt += num & bit
您将cnt的值增加1,2,4,8个值。 在排队时
cnt += (num & bit) > 0
首先,您要验证该语句,该语句返回0或1,然后使0或1失去价值。您可以通过在两个代码中打印cnt值来对其进行交叉检查。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.