如何从多个列表及其对应的列表中找到最大值



所以我有n个数组,我想对它们进行元素比较,并用python找到最大值。我在这里找到的一个好的解决方案是:

CCD_ 1。

但我希望有另一个列表,其中包含与最大值相对应的元组和它的来源列表。例如

CCD_ 2,CCD_ 3,c = [3, 5, 4]

CCD_ 5将返回一个列表CCD_。

但我想要另一份清单:

[(5,"b"), (7, "a"), (6,"b")]

a = [1, 7, 3]
b = [5, 3, 6]
c = [3, 5, 4]
l = {
"a": a,
"b": b,
"c": c
}
k = list(l.keys())
transposed = list(map(list, zip(*l.values())))
max_indexes = [x.index(max(x)) for x in transposed]
column_max_with_keys = [(x[i], k[i]) for i, x in zip(max_indexes, transposed)]

结果:

[(5, 'b'), (7, 'a'), (6, 'b')]

我本身不想要字符串,而是返回最大值来源的列表。

鉴于OP的这种区别,我制作了以下代码片段:

a = [1, 7, 3]
b = [5, 3, 6]
c = [3, 5, 4]
def find_maxes(*args):
return_data = list()

for arg in args:
return_data.append((max(arg), arg))

return return_data

ret_1 = find_maxes(a, b, c)
ret_2 = find_maxes(a, b)
ret_3 = find_maxes(a)
print(f"Return 1:n{ret_1}")  # [(7, [1, 7, 3]), (6, [5, 3, 6]), (5, [3, 5, 4])]
print(f"Return 2:n{ret_2}")  # [(7, [1, 7, 3]), (6, [5, 3, 6])]
print(f"Return 3:n{ret_3}")  # [(7, [1, 7, 3])]

此函数接收任意数量的列表,并在列表中查找最大值。然后,它将长度为2的元组添加到return_data列表中。列表中的每个元组的格式为:

(最大值,列表搜索(

其中,max_value是在listrongearched中找到的最大值。

您需要将源字典转换为值和键的嵌套列表,并应用max()从同一索引上的值中找到最大值。

初始转换可以使用下一个列表理解完成:

[[(i, k) for i in v] for k, v in l.items()]

然后,我们可以使用各种选项一起迭代内部列表。第一种选择是将它们解压到zip()中,并使用另一种列表理解对每组调用max:

[max(i) for i in zip(*([(i, k) for i in v] for k, v in l.items()))]

另一种选择是利用np.maximum.reduce([a,b,c])0的能力来处理多个可迭代项并在那里打开列表:

list(map(max, *([(i, k) for i in v] for k, v in l.items())))

完整代码:

l = {
"a": [1, 7, 3],
"b": [5, 3, 6],
"c": [3, 5, 4]
}
result = [max(i) for i in zip(*([(i, k) for i in v] for k, v in l.items()))]
# OR
result = list(map(max, *([(i, k) for i in v] for k, v in l.items())))

输出:

[(5, 'b'), (7, 'a'), (6, 'b')]

相关内容

  • 没有找到相关文章

最新更新