问题描述:有一个整数列表,里面有一个数字只出现了一次,而其他数字都出现了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)
运行后程序无输出,说明思路和代码正确。
----------相关阅读----------
----------喜大普奔----------
1、继《Python程序设计基础》(2017年9月第5次印刷)、《Python程序设计(第2版)》(2017年9月第4次印刷)、《Python可以这样学》(2017年7月第3次印刷)系列图书之后,董付国老师新书《Python程序设计开发宝典》已于2017年8月1日在清华大学出版社出版,并于2017年9月进行了第2次印刷。为庆祝新书《Python程序设计开发宝典》全面上架,清华大学出版社联合“赣江图书专营”淘宝店推出特价优惠活动,《Python程序设计开发宝典》原价69元,新书上架期间超低价39.8元,可以复制下面的链接使用浏览器打开查看图书详情和购买:
https://detail.tmall.com/item.htm?spm=a1z10.3-b-s.w4011-14464369246.84.46f16db0roWfX4&id=557107249812&rn=339cbc9df2bac424664103917dedfbd2&abbucket=8&tbpm=3