3 回答
TA贡献1818条经验 获得超3个赞
您还可以充分利用enumerate. 首先找到具有最大编号的行(及其索引)。然后在该行中找到该数字及其索引。
在这两种情况下,您都需要为max函数提供一个键,以便它考虑值(而不是索引):
def find_peak(m):
i, max_row = max(enumerate(m), key=lambda x: max(x[1]))
j, max_val = max(enumerate(max_row), key=lambda x: x[1])
return [i, j]
输出
print(find_peak([[1,2,3], [9,8,7], [5,4,6]]))
# [1, 0]
print(find_peak([[6,2,3], [1,8,7], [5,4,9]]))
# [2, 2]
TA贡献1843条经验 获得超7个赞
我认为当您考虑迭代索引而不是列表中的项目时它更容易:
from itertools import product
d = [[1, 2, 3], [7, 9, 8], [4, 5, 6]]
# generate all indices
x_len = range(len(d))
y_len = range(len(d[0]))
indices = product(x_len, y_len)
# select maximal item by index
key = lambda x: d[x[0]][x[1]]
max_index = max(indices, key=key)
print(max_index)
TA贡献1943条经验 获得超7个赞
您可以在展平的输入结构中找到最大值,然后返回指定先前找到的最大值位置的坐标:
from typing import List
def find_peak(m: List[List[int]]) -> List[int]:
_max = max([i for b in m for i in b])
return [[i, a] for i in range(len(m)) for a in range(len(m[0])) if m[i][a] == _max][0]
print(list(map(find_peak, [[[1, 2, 3], [9, 8, 7], [5, 4, 6]], [[6, 2, 3], [1, 8, 7], [5, 4, 9]]])))
输出:
[[1, 0], [2, 2]]
添加回答
举报