以下就是解答,一行代码,能看懂吗?如果看不懂,也没有关系,先看知识点1、2、3,看完后再看这个解答,你会恍然大悟,原来代码这么奇妙
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
# 一行代码搞定
return reduce(lambda x,y:x^y,nums)
我们先来写一个函数:
1def f(x,y):
2 return x+y
背景:
用标准格式来定义函数,这么写,当然没毛病,但是有时候我们不需要显式地定义函数,直接传入匿名函数会更加的方便。lambda 就是python内置的匿名函数。
语法格式:
lambda A:B
参数:
A -- 冒号前的A表示参数,多个参数用逗号相隔;
B -- 冒号后的B表示表达式,一个lambda只能有一个表达式;
实例:
>>> f = lambda x,y: x + y
等同于:
def f(x,y):
return x+y
优点:
写法简单,另外因为函数没有名字,不必担心函数名冲突。此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数:
描述:
异或运算是加减乘除后比较高级一点点的。功能是相同为0,不同为1,如果和0异或,那么是它本身;
规律:
相同的数异或为0:m^m=0;
不同的数异或为1:m^n=1;
任何数与0异或为任何数:x^0=x;
所以lambda x, y: x ^ y 的结果是一个整数;
实战:
a^b^c^b^a=?
用交换律:上述=(a^a)^(b^b)^c=0^0^c=c
描述
reduce() 函数会对参数序列中元素进行累积。
函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
语法
reduce(function, iterable[, initializer])
参数
function -- 函数,有两个参数
iterable -- 可迭代对象
initializer -- 可选,初始参数实例:
返回值
返回函数计算结果。
实例
from functools import reduce
# 两数相加
def add(x, y) :
return x + y
# 计算列表和:1+2+3+4+5
sum1 = reduce(add, [1,2,3,4,5])
# 使用 lambda 匿名函数计算列表中数字之和
sum2 = reduce(lambda x, y: x+y, [1,2,3,4,5])
# 打印sum1
print(sum1)
# 打印sum2
print(sum2)
分享交流:
博主建立了一个测试学习的圈子,如果你也热衷于学习技术、分享知识、互相学习、共同进步,可以添加博主wx:cs55101,带你入圈!