按位异或的3个特点:
- 0^0=0,0^1=1 0异或任何数=任何数
- 1^0=1,1^1=0 1异或任何数-任何数取反
- 任何数异或自己=把自己置0
示例:给定一个整数数组,除了一个元素外,每个元素都会出现两次。 找到那一个。
def singleNumber(self, nums):
res = 0
for num in nums:
res ^= num
return res
#也可以用如下方法实现
def singleNumber(self, nums):
return reduce(operator.xor, nums)
reduce()函数是Python内置的一个高阶函数。
reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。
filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
map()函数接收两个参数,一个函数 f 和一个list,map将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
>>>
>>> print filter(lambda x: x % 3 == 0, foo) # 滤波操作
[18, 9, 24, 12, 27]
>>>
>>> print map(lambda x: x * 2 + 10, foo)
[14, 46, 28, 54, 44, 58, 26, 34, 64]
>>>
>>> print reduce(lambda x, y: x + y, foo) # 传入的函数有x,y两个参数
139
左移的特点:
在没有溢出的前提下