我正在YouTube上观看一段有关编码采访的视频,其中一个问题是要找出两个列表之间的缺失值。这是他采用的方法之一,但我不明白'a'到底是怎么成为缺失值。
def function(nums,num2):
a = 0
for num in nums:
a ^= num
print(a)
for num in num2:
a ^= num
print(a,"\n")
return a
function([1,2,3,4],[3,1,2])
答案 0 :(得分:4)
这样想:您要返回(1 ^ 2 ^ 3 ^ 4)^(3 ^ 1 ^ 2)。好吧,XOR是可交换的和关联的,因此等于(1 ^ 1)^(2 ^ 2)^(3 ^ 3)^ 4。但是x ^ x为0,因此等于4。换句话说,成对的匹配值会抵消,而剩下一个不匹配的值。
答案 1 :(得分:3)
将整数与自身进行XOR运算时,您将获得0。
因此,如果您有一个列表[1,2,3,4]
和另一个列表[3,1,2]
。现在,您将所有内容进行XOR,相同的元素将被抵消-剩下的1个元素将有所不同。
[1,2,3,4] xor [3,1,2] = [4]
顺便说一句,这假设列表仅相差一个元素。如果没有,您将获得所有不同元素的XOR。
答案 2 :(得分:0)
在上面的解决方案中,我们将列表中所有元素的异或。
当您对两个相同的元素进行XOR运算时,您将得到0
>>> 1^1
0
因此,当您对列表中的所有元素进行XOR运算时,相同的元素将被抵消,因为XOR是可交换和关联的,而未配对的元素将保留。
>>> 1^2^3^4^3^1^2
4
>>> 1^1^2^2^3^3^4
4
答案 3 :(得分:0)
您将不得不深入研究基于电路数字设计的XoR工作原理。因此,如果您提供相同的输入,则按照数字设计的结构将XoR与相同的输入配对时,XoR将始终返回0。因此,正如汤姆·卡兹斯(Tom Karzes)指出的那样,其他值将被无效,剩下的就是剩下的值。 XoR还可以解决其他一些问题,例如在填充每个元素的副本的数组中查找唯一元素
This wiki will give you a good description of how the XOR gate works