【问题标题】:Is there a way to use a lambda/reduce function to find the highest value in my elements?有没有办法使用 lambda/reduce 函数在我的元素中找到最高值?
【发布时间】:2022-11-12 07:22:40
【问题描述】:

我要通过将元组内的整数相乘,然后将它们与各自的匹配项相加,来找到由它们的“#”表示的元组内的最大值。

例子:

[[1,...("9744", 9, 44.95)], 
[2, ... ("9744", 9, 44.95)]...]

Multiply 9 and 44.95:
[[1,...("9744", 9, 44.95)], 
[2, ... ("9744", 9, 44.95)]...]

[[1,...("9744", 809.1)], 
[2, ... ("9744", 809.1)]...]

现在我们知道“9744”在他们的元组中具有最高值。

我已经使用 max() 和各种 lambda 函数这样做了。我不想过多地更改我的代码,并且想要一些关于如何从这里开始的提示。

orders = [[1, ("5464", 4, 9.99), ("8274",18,12.99), ("9744", 9, 44.95)],
           [2, ("5464", 9, 9.99), ("9744", 9, 44.95)],
           [3, ("5464", 9, 9.99), ("88112", 11, 24.99)],
           [4, ("8732", 7, 11.99), ("7733",11,18.99), ("88112", 5, 39.95)]]

我的代码:

print(list(map(lambda x: (max(list(map(lambda a: (a[0], a[1]+a[1]),(list(map(lambda y: (y[0], y[1]*y[2]), x[1:]))))))), orders)))

我的输出:

[('9744', 809.1), ('9744', 809.1), ('88112', 549.78), ('88112', 399.5)]

期望的输出:

["9744", 809.1]

我想知道,折叠我的输出值以获得所需输出的最有效方法是什么。我必须在这里实现一个 if 语句吗?

【问题讨论】:

  • “我要通过将元组内的整数相乘,找到元组内字符串表示的最大值。”这是我在精神上检查的地方。字符串与整数的乘积有什么关系?
  • @timgeb 英语不是我的第一语言,如果我想要的输出在产品结果前面有字符串。那是不是措辞不正确?
  • 编码为字符串的最高 int 是“88112”,为什么在所需的输出中是“9744”?
  • @timgeb 如果我的编辑弥补了我试图解释的内容,请告诉我。

标签: python lambda


【解决方案1】:

你可以只取max然后list结果:list(max(<your code>))

清理一下,那将是:

list(max(map(lambda p: (max(map(lambda t: (t[0], 2*t[1]*t[2]), p[1:]))), orders)))

或使用生成器理解:

list(max( max( (k, 2 * v*w) for k, v, w in tps ) for _, *tps in orders ))

【讨论】:

    猜你喜欢
    • 2022-09-27
    • 1970-01-01
    • 2010-12-11
    • 2020-05-28
    • 1970-01-01
    • 2015-07-06
    • 2020-07-26
    • 2018-02-08
    • 2020-04-04
    相关资源
    最近更新 更多