如何使用带两个参数的lambda来查找值最大的元素?

2024-05-06 16:54:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我得到了一个任务,就是用lambda函数在列表中找到最大值。我必须在一个lambda函数中使用lambda和一个具有两个参数的函数。在

我知道如何通过定义函数来执行任务,但不知道如何将其转换为lambda函数。在

myList = [1,2,3,4,5,6,7,8,9,10]

#Here I can find the max value by defining a function

def maxVal(list_a):

   max = 0

   for i in list_a:

       if i > max:
          max = i
          return max
print(maxVal(myList))

#Here I attempt to use a lambda function to find the max value

maxMyList = map(lambda x,y: x[0] >= y[0], myList, myList)

print(maxMyList(myList,myList))

编辑:很抱歉,因为这是我第一次在这里发帖。为了清楚起见,我不能定义任何在这个程序中使用的函数。我只想发布定义函数maxVal的代码,以表明我理解我需要做什么的逻辑。谢谢你的回复,我真的很感激!在


Tags: thetolambda函数here定义valuefunction
3条回答

你处理这件事的方式真的没有错。您只需以正确的方式将lambda合并到其余代码中:

myList = [1,2,3,10,4,5,6,7,8,9]

def maxVal(list_a, compare_function):
    max = -sys.maxsize - 1  # strange but true...this seems to be the canonical way to get the smallest 32 bit `int`
    for i in list_a:
        if compare_function(i, max):
            max = i
    return max

my_compare_function = lambda x,y: max(x, y)

print(maxVal(myList, my_compare_function))

结果:

^{pr2}$

我确实需要更改调用return max的级别。我不知道这是一个逻辑错误,还是仅仅是一个转录错误,当你把你的代码放入一个S.O.问题。还请注意,我将10移到输入数据的另一个位置,以确保它不必在最后才被发现是最大值。在

如果你想要一个“更酷”和更现代的答案,reduce真的是专为做你想做的事而设计的。这里有一个简单的解决方案。在

import functools

myList = [1,2,3,10,4,5,6,7,8,9]
r =  functools.reduce(lambda v1, v2: max(v1, v2), myList)
print(r)

结果:

^{pr2}$

还请注意,“max”本身是一个接受两个参数的函数,因此您可以直接使用它来获得非常简单的结果……在指定使用lambda的情况下,这并不适用:

myList = [1,2,3,10,4,5,6,7,8,9]
r =  functools.reduce(max, myList)
print(r)

这些等同于写循环的函数非常流行,这是有原因的。当结合以流的方式处理数据时,这是一个非常强大的想法。随着它越来越受欢迎,我认为它会被认为更具可读性。作为一个老前辈,我刚刚开始接受所有这些函数/流编程……更多的是用Java而不是Python,但仍然如此。这是一套功能强大的工具,有助于您真正理解。在

您可以定义一个函数,该函数将一个列表作为第一个参数,可选地将当前最大值作为第二个参数,并且如果列表中的第一个项大于当前最大值或当前最大值为None,则递归地调用它自己,并将列表的其余部分作为第一个参数,直到列表的其余部分为空,此时返回当前最大值:

maxVal = lambda lst, m=None: maxVal(lst[1:], m if m is not None and lst[0] < m else lst[0]) if lst else m

因此:

^{pr2}$

输出:10

Python有一个用于排序列表的内置函数。它是sorted()

例如:sorted([2, 8, 8, 3, 7, 4, 2, 93, 1])=[1, 2, 2, 3, 4, 7, 8, 8, 93]

我们可以使用下标[::-1]来反转列表,因此完成的lambda函数是:

maxVal = lambda l: sorted(l)[::-1][0]

相关问题 更多 >