18
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 关键字或内置函数。谢谢!

4

9 回答 9

26

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

>>> max(enumerate(a),key=lambda x: x[1])[0]
3
于 2012-07-17T21:15:49.850 回答
21

一个简单的一行:

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

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

于 2012-07-17T21:02:59.813 回答
9

更新:

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之禅)

于 2012-07-17T21:01:51.390 回答
8

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

for i in range(len(a)):
    if a[i] > max:
        max = a[i]
        maxIndex = i
于 2012-07-17T21:04:01.157 回答
5

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

import numpy as np
np.array(a).argmax()
于 2014-10-01T14:05:22.083 回答
1

您还可以enumerate在遍历列表时使用 to 为您提供索引:

>>> 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)
于 2012-07-17T21:04:33.873 回答
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

但是,这不如其他建议的答案(例如使用枚举)快。不过很简单。

于 2012-07-17T21:03:04.123 回答
-1

这更简单

x.index(max(x)) #where x is your list
于 2017-05-16T13:59:15.827 回答
-3

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

最大值=最大值(地图(浮点数,[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()))

于 2013-04-01T04:33:00.067 回答