[英]getting all the tiles with the maximum value in a 2d grid (a multidimensional list)
我有一个二维网格(多维列表),可能像这样: [[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))
但是我希望有人能指出我一个更简洁的解决方案吗?
一种方法是将itertools.chain
与max()
一起使用以获取最大值,然后对enumerate()
使用列表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)]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.