【问题标题】:Finding coordinate of maximum value in list of lists在列表列表中查找最大值的坐标
【发布时间】:2021-03-23 14:54:27
【问题描述】:

我的任务是在 python 的列表中找到最大值的确切坐标。此列表列表称为模拟地形坐标的网格。 这是网格,以及我找到最大值的代码:

grid = [[15, 16, 18, 19, 12, 11],
        [13, 19, 23, 21, 16, 12],
        [12, 15, 17, 19, 22, 10],
        [10, 14, 16, 13, 9, 6]]
maxi = 0
for i in grid:
    for j in i:
        if j > maxi:
            maxi = j

这段代码找到了最大值,但是我一直在寻找坐标。输出应该是:
全局最大值:(1,2) 23
因为最大值 (23) 在第一行和第二列。 我曾尝试使用 index 和 find 但它们不起作用或将我的值作为输入。感谢您提供任何提示或帮助,在此先感谢您。

【问题讨论】:

  • 也许你需要查找enumerate()函数。
  • 我认为这是某种家庭作业,不允许使用 numpy?
  • 是的,这更像是一种练习,我不能使用 numpy

标签: python list indexing max nested-loops


【解决方案1】:

您可以使用内置函数enumerate

将您的代码更新为:

grid = [[15, 16, 18, 19, 12, 11],
        [13, 19, 23, 21, 16, 12],
        [12, 15, 17, 19, 22, 10],
        [10, 14, 16, 13, 9, 6]]
        
maxi = -float('inf')
maxCoord = None
for i, row in enumerate(grid):
    for j, col in enumerate(row):
        if col > maxi:
            maxi = col
            maxCoord = (i, j)
            
print(maxCoord, maxi) #(1, 2) 23

【讨论】:

  • Nitpick:如果您的列表完全由负数组成,maxCoord 将永远不会从无更改。设置maxi = -np.inf; maxCoord = Nonemaxi = grid[0][0]; maxCoord = (0, 0)
  • 这很好。更新了答案以解决这个问题。
  • 您好,感谢您的回复,我对枚举不太熟悉。我只是想知道, -float('inf') 的目的到底是什么?
  • @FranPY3 没问题!如果对您有帮助,请务必将答案标记为正确。所以,-float('inf') 只是意味着负无穷大。我将maxi 的起始值更改为-float('inf'),因为如果我们以0 开头,如果您的grid 仅由负值组成,maxi if 语句if col > maxi 将永远不会为真,我们会得到错误的输出。但是如果你知道你的grid 永远不会有负值,你可以让maxi0 开头。
【解决方案2】:

Enumerate 可能是一个选项,因为它已经被提议。如果你想保持你原来的函数来找到最大值,你可以调用它的坐标使用:

for sublist in grid:
  if maxi in sublist:
    print(grid.index(sublist), sublist.index(maxi))

【讨论】:

    最近更新 更多