繁体   English   中英

在Python中具有3个参数的Lambda函数

[英]Lambda function with 3 arguments in Python

我正在使用lambda函数来检查最大值,并传递3个参数

from functools import reduce

# function to check bigger item
f = lambda a,b,c: a if (a > b) else (b if (b > c) else c)

# reduce function
reduce(f, [47, 11, 42, 102, 13])

但是我收到这样的错误


TypeError跟踪(最近一次通话)

 5 6 # reduce function 7 reduce(f, [47, 11, 42, 102, 13, 21]) TypeError: <lambda>() missing 1 required positional argument: 'c' 

如果要查找列表中最大的元素,则一次比较三个元素的方式与一次比较两个元素的方式相同。 两种方式花费的时间相同。 即使您创建了诸如reduce类的函数,但一次只需要3个元素,但您的想法仍然存在缺陷,因为如果列表由4或6或8或...个元素组成,该怎么办?预期。

from functools import reduce

# function to check bigger item
g = lambda a,b: a if (a > b) else b 
f(1,3,4)
# reduce function
reduce(g, [47, 11, 42, 102, 13])

来自: https : //docs.python.org/3/library/functools.html

functools.reduce(function,iterable [,初始值设定项])

两个自变量的函数从左到右累计应用于序列项,以将序列缩减为单个值。

因此,reduce是为具有2个参数的函数设计的。

要检查最大值,请使用内置函数max:

max([47, 11, 42, 102, 13])

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM