获取二维网格中所有最大值的单元格
我有一个二维网格(多维列表),可能长这样:[[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.chain
和 max()
来找到最大值,然后再用列表推导式和 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)]