所以我有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')]