2017-05-13 131 views
0

我有一个名为dist的多维列表。我想在不使用NumPy的情况下获取此列表/矩阵上的最大元素的位置。我如何使用内置函数来实现?我使用Python 3.6如何查找列表中最大/最小元素的索引?

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

为什么不NumPy的?使用NumPy非常简单**和快速**,您只需使用'np.argmax'和'np.unravel_index'。 – Michael

+0

@Michael感谢您的评论和编辑。我的任务需要通过内置函数完成。 – feys

+0

我找到了答案: 我在范围内(len(dist)): 对于范围内的j(len(dist)): 如果dist [i] [j] == max(max(dist)): max_index =(i,j) – feys

回答

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)) 
相关问题