问题描述:有一个整数列表,里面有一个数字只出现了一次,而其他数字都出现了4次,要求查找这个只出现了一次的数字。
思路要点:一个数字和自己异或一次会变成0。
参考代码:
import random
def onlyYou(lst):
r = lst[0]
for item in lst[1:]:
r = r ^ item
return r
for i in range(100000):
lst = random.sample(range(1000), 8)
lst = lst[:-1]*4 + lst[-1:]
random.shuffle(lst)
# 传统套路
r = onlyYou(lst)
# reduce,函数式编程
rr = reduce(lambda x,y:x^y, lst, 0)
if lst.count(r)!=1 or lst.count(rr)!=1:
print(lst)
print(r, rr)
运行后程序无输出,说明思路和代码正确。