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キーワードや組み込み関数を使用せずに、シンプルに保つようにしてください。ありがとう!
組み込みのindex()関数の使用が許可されていない場合は、foreachループを使用するのではなく、インデックスで反復してください。
for i in range(len(a)):
if a[i] > max:
max = a[i]
maxIndex = i
私のコードではこれを使用します:
>>> max(enumerate(a),key=lambda x: x[1])[0]
3
以下の簡単なワンライナー:
_max( (v, i) for i, v in enumerate(a) )[1]
_
これにより、後でリストを.index()
する必要がなくなります。
更新:
_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の禅)
Numpy.arrayオブジェクトのargmaxメソッドを使用します。
import numpy as np
np.array(a).argmax()
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)
これはずっと簡単です
x.index(max(x)) #where x is your list
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
ただし、これは他の推奨される回答(列挙を使用するなど)ほど高速ではありません。単純ですが。