繁体   English   中英

为什么这两个循环返回不同的结果?

[英]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 & bitnum & 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

根据经验,请勿使用10测试; 用随机数进行测试( 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM