【问题标题】:How to find the index of the max/min element on a list?如何在列表中找到最大/最小元素的索引?
【发布时间】:2017-05-13 10:28:59
【问题描述】:

我有一个名为dist 的多维列表。我想在此列表/矩阵不使用 NumPy 上获取最大元素的位置。如何使用内置函数来做到这一点?我正在使用 Python 3.6

dist = [[    0.0,  
          1804.04,
          2120.09,
          5502.24],
        [ 1804.04,
             0.0,
          7395.44,
          5828.17]]

【问题讨论】:

  • 为什么没有 NumPy?使用 NumPy 非常简单快速,您只需要使用np.argmaxnp.unravel_index
  • @Michael 感谢您的评论和编辑。我的任务需要通过内置函数来完成。
  • 我找到了答案:for i in range(len(dist)): for j in range(len(dist)): if dist[i][j] == max(max(dist )): max_index = (i,j)

标签: python-3.x matrix-indexing


【解决方案1】:

尽管我强烈建议使用 NumPy(参见 OP 问题下方的评论),但这个没有 NumPy(仅使用内置函数 enumerate 并且也适用于不规则数组):

dist = [[    0.0,  
          1804.04,
          2120.09,
          5502.24],
        [ 1804.04,
             0.0,
          7395.44,
          5828.17]]  # list of lists

maximum, max_line, max_col = 0, 0, 0  # !!!
for line, l in enumerate(dist):
    for col, c in enumerate(l):
        if c > maximum: maximum, max_line, max_col = c, line, col
print(maximum, max_line, max_col)

在标有!!! 的行中,假设矩阵dist 中只有正值(来自名称dist 及其在OP 的未编辑帖子中的对称性,以及零元素在我认为合理的对角线上)。否则将不得不为maximum 选择一个较小的起始值。

下面是它如何与 NumPy 一起工作(请参阅 np.argmaxnp.unravel_index):

import numpy as np
dist = np.array(dist)  # array
print(np.unravel_index(np.argmax(dist), dist.shape))

【讨论】:

    猜你喜欢
    • 2021-04-20
    • 1970-01-01
    • 2020-12-05
    • 2015-01-05
    • 2015-01-13
    • 2021-10-10
    • 1970-01-01
    • 2019-11-28
    • 1970-01-01
    相关资源
    最近更新 更多