为什么XOR会返回这两个列表中的缺失值?

时间:2019-04-11 03:14:14

标签: python logical-operators

我正在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])

4 个答案:

答案 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