返回列表中的最大值

3

你好,我有几个列表,想要创建一个新的分别由各自最高值组成的列表。例如,这些就是这些列表:

list1 = 5, 1, 4, 3
list2 = 3, 4, 2, 1
list3 = 10, 2, 5, 4

这是我希望返回的内容:

这些是我希望您返回的内容:

[10, 4, 5, 4]

我认为我可以做这样的事情:

largest = list(map(max(list1, list2, list3)))

但是我遇到了一个错误,提示地图需要超过1个参数。

我还以为我可以编写if、elif语句来处理大于的情况,但似乎它只处理第一个值,并将该列表作为“更大的值”返回。

感谢任何帮助。

3个回答

8
这是“zip splat”技巧:
>>> lists = [list1, list2, list3]
>>> [max(col) for col in zip(*lists)]
[10, 4, 5, 4]

你也可以使用NumPy数组:

>>> import numpy as np
>>> np.array(lists).max(axis=0)
array([10,  4,  5,  4])

那个有效,非常感谢。虽然我不太确定为什么它有效,但再次感谢您的帮助! - Anthony Reifel

6

您使用了 map 不正确。请将最后一行替换为以下内容:

largest = list(map(max, zip(list1, list2, list3)))

map中,第一个参数是要应用的函数,第二个参数是一个可迭代对象,它将产生要在函数上应用的元素。zip函数允许您同时迭代多个可迭代对象,返回相应元素的元组。这就是这段代码的工作原理!

哦,好的谢谢,这很有道理。我正在使用map函数从列表中做减法,我复制了这一行,删除了减法操作,并用列表变量替换了它。真是自己踢自己。感谢您的帮助,将来会很有用。 - Anthony Reifel

0

使用map的可迭代S参数对可迭代对象有隐式的zip效果。

map(max, *(list1, list2, list3))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接