如何手动(使用显式循环)查找列表中最大值的索引?

问题描述 投票:0回答:9

我能够通过显式循环获取数组中的最大值:

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()

如何获得该值的索引(位置)?

python list indexing max
9个回答
31
投票

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

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

24
投票

简单的一行:

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

这避免了必须

.index()
之后的列表。


11
投票

更新:

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()
将找到列表中匹配的第一个项目的索引,因此,如果您有多个相同的“最大值”值,则返回的索引将是第一个的索引。

欲了解更多信息:

  • 最大()
  • 索引()
本着“简单胜于复杂”的精神。 (Python之禅)


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

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

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

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

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)
    

1
投票
这更简单

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

0
投票
使用index(x)函数。请参阅此处的文档

http://docs.python.org/tutorial/datastructs.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

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


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

最大值= max(地图(浮点,[2,1,5,234,3,44,7,6,4,5,9,11,12,14,13]))

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

文件.txt

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

最大值= max(map(float,(open('file.txt', 'r').readline()).split()))

© www.soinside.com 2019 - 2024. All rights reserved.