web-dev-qa-db-ja.com

Pythonリスト内の最大のインデックスを見つける

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キーワードや組み込み関数を使用せずに、シンプルに保つようにしてください。ありがとう!

16
Shankar Kumar

組み込みのindex()関数の使用が許可されていない場合は、foreachループを使用するのではなく、インデックスで反復してください。

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

私のコードではこれを使用します:

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

以下の簡単なワンライナー:

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

これにより、後でリストを.index()する必要がなくなります。

19
Jon Clements

更新:

_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の禅)

9
Levon

Numpy.arrayオブジェクトのargmaxメソッドを使用します。

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

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
poke

これはずっと簡単です

x.index(max(x)) #where x is your list
0
mohamed emad

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

ただし、これは他の推奨される回答(列挙を使用するなど)ほど高速ではありません。単純ですが。

0
MoRe