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

时间:2012-07-17 21:00:24

标签: python list indexing 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()

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

9 个答案:

答案 0 :(得分:22)

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

>>> max(enumerate(a),key=lambda x: x[1])[0]
3

答案 1 :(得分:19)

一个简单的单线:

max( (v, i) for i, v in enumerate(a) )[1]

这样可以避免在.index()列表后显示。

答案 2 :(得分: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

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


以前的解决方案

a.index(max(a))

会做到这一点。

内置函数max(a)将在列表a和列表函数中找到最大值 index(v)会在列表中找到值v的索引。通过组合它们,您可以获得所需的内容,在本例中为索引值3

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

了解更多信息:

本着“简单比复杂更好”的精神。 (Python的禅宗)

答案 3 :(得分:7)

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

for i in range(len(a)):
    if a[i] > max:
        max = a[i]
        maxIndex = i

答案 4 :(得分:3)

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

import numpy as np
np.array(a).argmax()

答案 5 :(得分:1)

您可以使用enumerate在迭代列表时为您提供索引:

>>> a = [2, 1, 5, 234, 3, 44, 7, 6, 4, 5, 9, 11, 12, 14, 13]
>>> maxIndex, maxNumber = 0, 0
>>> for index, number in enumerate(a):
        if number > maxNumber:
            maxIndex = index
            maxNumber = number

>>> maxIndex, maxNumber
(3, 234)

答案 6 :(得分:0)

使用index(x)函数。请参阅此处的文档http://docs.python.org/tutorial/datastructures.html

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
    max_index = a.index(max)
    print max

然而,这并不像其他建议的答案那么快(例如使用枚举)。很简单。

答案 7 :(得分:0)

这样更简单

x.index(max(x)) #where x is your list

答案 8 :(得分:-2)

如果你喜欢强大的代码,你会喜欢这个:) 如果你只有整数,你可以用float替换float。

  

maximum = max(map(float,[2,1,5,234,3,44,7,6,4,5,9,11,12,14,13]))

如果您在文本文件中输入了输入,请执行以下操作:

file.txt的

2 1 5 234 3 44 7 6 4 5 9 11 12 14 13

  

maximum = max(map(float,(open('file.txt','r')。readline())。split()))