python - 如何使用带有两个参数的 lambda 来找到具有最高值的元素?
问题描述
我的任务是使用 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 的代码,以表明我理解我需要做的逻辑。感谢您的所有回复,我真的很感激!
解决方案
你做这件事的方式真的没有错。您只需要以正确的方式将 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))
结果:
10
我确实必须改变return max
被调用的级别。当您将代码放入 SO 问题时,我不知道这是逻辑错误,还是只是转录错误。另请注意,我将 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)
结果:
10
另请注意,“max”本身是一个带有两个参数的函数,因此您可以直接使用它来获得一些非常简单的东西......这在您的分配是使用 lambda 的情况下并不适用:
myList = [1,2,3,10,4,5,6,7,8,9]
r = functools.reduce(max, myList)
print(r)
这些编写循环的功能等价物风靡一时,而且有充分的理由。当与将数据作为流处理相结合时,这是一个超级强大的想法。随着它变得越来越流行,我认为它会被认为更具可读性。作为一个老前辈,我刚刚开始使用所有这些函数式/流式编程......在 Java 中比在 Python 中更多,但仍然如此。这是一套功能强大的工具,有助于您真正理解。
推荐阅读
- java - TouchAction 类在按下方法时显示错误
- reactjs - 如何在 React Typescript 应用程序中使用 Wavesurfer.js 插件?
- sql - 如何合并 sqlite3 会话扩展会话?
- gatsby - 如果所有节点恰好在该字段上为空,则 Gatsby 不会推断 graphql 字段
- python - lambda 上 AWS 中的 Python 多线程
- arrays - 哪些循环数字的 Ruby 方法实际上创建了数组,哪些没有?
- macos - 如何在 Mac(或在线)上查看 Azure 服务总线主题订阅的配置规则?
- python - 提取有限的日期模式集
- python - 使用 Groupby 对行进行分组并转换开始日期时间和结束日期时间列的日期和时间
- javascript - JavaScript:从 JSON 数组构建自定义数据树