Python查找列表中最大值的索引

Sha*_*mar 15 python indexing list max

def main():
    a = [2,1,5,234,3,44,7,6,4,5,9,11,12,14,13]
    max = 0
    for number in a:
        if number > max:
            max = number
    print max

if __name__ == '__main__':
    main()
Run Code Online (Sandbox Code Playgroud)

我能够获得数组中的最大值(当然不使用max() ...).如何获得该值的索引(位置)?请尽量保持简单,不使用新的Python关键字或内置函数.谢谢!

ovg*_*vin 22

在我的代码中我会使用这个:

>>> max(enumerate(a),key=lambda x: x[1])[0]
3
Run Code Online (Sandbox Code Playgroud)

  • 或者,`max(range(len(a)),key = lambda i:a [i])` (5认同)

Jon*_*nts 19

一个简单的一个班轮:

max( (v, i) for i, v in enumerate(a) )[1]
Run Code Online (Sandbox Code Playgroud)

这避免.index()了之后的列表.

  • 请注意,如果列表具有重复项,则将返回max元素所在的最大索引.`(5,3)<(5,4)`返回'True` (4认同)

Lev*_*von 8

更新:

max_idx = -1
max_val = a[0]
for i in xrange(1, len(a)):
    if a[i] > max_val:
        max_val = a[i]
        max_idx = i
Run Code Online (Sandbox Code Playgroud)

这不会影响内置函数max(),也会为仅包含负值的列表提供正确的答案.


以前的方案

a.index(max(a))
Run Code Online (Sandbox Code Playgroud)

会做的.

内置函数max(a)将在列表中找到最大值a,list函数 index(v)v在列表中找到值的索引.通过组合它们,您可以得到您想要的东西,在这种情况下是索引值3.

请注意,.index()将找到列表中匹配的第一个项的索引,因此如果您有几个相同的"max"值,则返回的索引将是第一个的索引.

欲获得更多信息:

本着"简单比复杂更好"的精神.(Python的禅宗)


Rob*_*ner 7

如果不允许使用内置的index()函数,只需使用索引进行迭代,而不是使用foreach循环.

for i in range(len(a)):
    if a[i] > max:
        max = a[i]
        maxIndex = i
Run Code Online (Sandbox Code Playgroud)

  • @ShankarKumar作为一个学生`range`和`len`是内置函数:) (6认同)
  • @Levon你不应该在列表之前将max分配给零,你应该将它设置为列表中的第一项. (3认同)

小智 5

使用 numpy.array 对象的 argmax 方法。

import numpy as np
np.array(a).argmax()
Run Code Online (Sandbox Code Playgroud)