获取二维网格中所有最大值的单元格

1 投票
1 回答
1008 浏览
提问于 2025-04-18 10:55

我有一个二维网格(多维列表),可能长这样:[[1,2,3],[1,3,3],[1,1,1]]。我想找出所有包含最大值的元素的位置,所以在这个例子中,结果应该是:(0,3), (1,1)(1,2)

现在我有一种很笨的方法可以实现这个功能,像这样:

max_val = -999999
for i in range(board.get_dim()):
    for j in range(board.get_dim()):
        if scores[i][j] > max_val:
            max_val = scores[i][j]

max_coords = []            
for i in range(board.get_dim()):
    for j in range(board.get_dim()):
        if scores[i][j] == max_val:
            max_coords.append((i,j))

但我希望有人能告诉我一个更简洁的解决方案。

1 个回答

2

一种方法是使用 itertools.chainmax() 来找到最大值,然后再用列表推导式和 enumerate() 来获取这个最大值的索引。

>>> from itertools import chain
##find the max value on a flattened version of the list 
>>> max_val = max(chain.from_iterable(lst)) 
>>> lst = [[1,2,3], [1,3,3], [1,1,1]]
>>> [(i, j) for i, x in enumerate(lst) for j, y in enumerate(x) if y == max_val]
[(0, 2), (1, 1), (1, 2)]

不过,使用 NumPy 会简单很多:

>>> import numpy as np
>>> arr = np.array(lst)
>>> zip(*np.where(arr==arr.max()))
[(0, 2), (1, 1), (1, 2)]

撰写回答