簡體   English   中英

在二維網格(多維列表)中獲取具有最大值的所有圖塊

[英]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.chainmax()一起使用以獲取最大值,然后對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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM