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のZen)

于 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リストを反復処理するときに、インデックスを提供するために使用することもできます。

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

強力なコードが必要な場合は、次のようにします:)整数だけの場合は、floatをintに置き換えることができます。

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

于 2013-04-01T04:33:00.067 に答える