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]]
添加回答
舉報