1. 代码思路
- 整体目标:这段 Python 代码的目的是对给定列表中的元素进行一种特殊的计算,通过按位异或(
^)操作,最终得到一个结果。在给定的测试用例中,可以看出这个结果似乎是列表中只出现一次的元素(在test1中是4,在test2中是2)。 - 实现方式:代码通过遍历输入列表
inp中的每个元素,并使用按位异或操作来更新result的值。按位异或操作有一个特殊的性质,即对于两个相同的数进行按位异或,结果为0。例如,1 ^ 1 = 0,2 ^ 2 = 0等。而任何数与0进行按位异或,结果是该数本身。所以,当列表中存在成对出现的数时,它们在按位异或的过程中会相互抵消,最后只剩下只出现一次的数。
2. 代码详解
-
函数定义:
收起
python
复制
def solution(inp):
这里定义了一个名为solution的函数,它接受一个列表inp作为参数。
-
计算过程:
收起
python
复制
result = 0
for num in inp:
result ^= num
-
首先,初始化
result为0。然后,通过for循环遍历输入列表inp中的每个元素num。在每次循环中,将result与num进行按位异或操作(^=)。这个操作会更新result的值。例如,对于test1 = [1, 1, 2, 2, 3, 3, 4, 5, 5],第一次result = 0 ^ 1 = 1,第二次result = 1 ^ 1 = 0(因为1 ^ 1 = 0),第三次result = 0 ^ 2 = 2,以此类推。经过一系列的按位异或操作,成对出现的数会相互抵消,最终result的值就是只出现一次的数(在这个例子中是4)。 -
返回结果:
收起
python
复制
return result
最后,函数返回经过按位异或计算后的result值。
-
测试部分:
收起
python
复制
test1 = [1, 1, 2, 2, 3, 3, 4, 5, 5]
print(solution(test1) == 4)
test2 = [0, 1, 0, 1, 2]
print(solution(test2) == 2)
这里定义了两个测试用例test1和test2,并通过print语句来验证solution函数的结果是否符合预期。对于test1,期望函数返回4,对于test2,期望函数返回2。
3. 图解(以test1为例)
-
初始状态:
result = 0步骤 操作 result 值 1 result = 0 ^ 11 2 result = 1 ^ 10 3 result = 0 ^ 22 4 result = 2 ^ 20 5 result = 0 ^ 33 6 result = 3 ^ 30 7 result = 0 ^ 44 8 result = 4 ^ 51 9 result = 1 ^ 54
可以看到,成对的数在按位异或过程中相互抵消,最后剩下只出现一次的4。同样的原理适用于test2等其他测试用例。这种方法利用了按位异或的特性,巧妙地实现了找出列表中只出现一次的元素的功能。