如何在列表中找到max / min元素的索引?

时间:2017-05-13 10:28:59

标签: python-3.x matrix-indexing

我有一个名为dist的多维数据列表。我想在不使用NumPy 的情况下获取此列表/矩阵上的max元素的位置。如何使用内置函数执行此操作?我使用的是Python 3.6

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

1 个答案:

答案 0 :(得分:0)

尽管我强烈建议使用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))