异或运算
1、定义
简单说就是a,b两个值异或运算,相同返回0,不同返回1。
1 ^ 0 =1 , 0 ^ 1=1 , 1 ^ 1 =0 , 0 ^ 0 =0
2、性质
交换律:A ^ B = B ^ A;
结合律:A ^ (B ^ C) = (A ^ B) ^ C;
恒等律:X ^ 0 = X;
归零律:X ^ X = 0;
自反:A ^ B ^ B = A ^ 0 = A;
3、python中的异或运算
首先python会将输入的两个值转换为二进制,
然后按位求异或结果,最后转换成十进制,输出结果。
例如 5^3=6,即101与011按位求异或为110,转换为十进制为6。
实例:Leetcode(只出现一次的数字)
开始我选择用的Counter计数器,返回字典进行查找
class Solution:
def singleNumber(self, nums: List[int]) -> int:
counts = Counter(nums)
for i in counts:
if counts[i]==1:
return i
输入:[2,2,1]
输出:1
然后看了题解,竟然能用异或位运算一行代码实现
这里先介绍一下reduce()函数:reduce(function, iterable[, initializer])
function – 函数,有两个参数
iterable – 可迭代对象
initializer – 可选,初始参数
该函数会将一个数据集合(元组,链表等)中第1,2个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
class Solution:
def singleNumber(self, nums: List[int]) -> int:
return reduce(lambda x,y:x^y,nums)
输入:[2,2,1]
输出:1