wake-up-neo.com

Python-Index für das Maximum in der Liste suchen

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 __== '__main__':
    main()

Ich bin in der Lage, den Maximalwert im Array zu erhalten ( ohne max () natürlich ...). Wie kann ich den Index (Position) dieses Wertes erhalten? Versuchen Sie es einfach zu halten, ohne neue Python-Schlüsselwörter oder integrierte Funktionen zu verwenden. Vielen Dank!

15
Shankar Kumar

Wenn Sie die eingebaute Funktion index () nicht verwenden dürfen, iterieren Sie einfach mit einem Index, anstatt eine foreach-Schleife zu verwenden.

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

In meinem Code würde ich Folgendes verwenden:

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

Ein einfacher Liner von:

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

Dies vermeidet die Notwendigkeit, die Liste danach zu .index().

18
Jon Clements

Aktualisieren:

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

Dadurch wird die integrierte Funktion max() nicht gespiegelt, und auch für Listen, die nur aus negativen Werten bestehen, werden korrekte Antworten angezeigt.


Vorherige Lösung

a.index(max(a))

wird den Trick tun.

Die integrierte Funktion max(a) findet den Maximalwert in Ihrer Liste a und die Listenfunktion index(v) findet den Index des Werts v in Ihrer Liste. Durch die Kombination erhalten Sie, wonach Sie suchen, in diesem Fall den Indexwert 3.

Beachten Sie, dass .index() den Index des übereinstimmenden first - Elements in der Liste findet. Wenn Sie also mehrere identische "max" -Werte hatten, wäre der zurückgegebene Index der erste.

Für mehr Informationen: 

Im Sinne von "Einfach ist besser als komplex". (Zen von Python)

8
Levon

Verwenden Sie die argmax-Methode des numpy.array-Objekts.

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

Sie können enumerate verwenden, um Ihnen auch einen Index zu geben, während Sie eine Liste durchlaufen:

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

das ist viel einfacher 

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

Verwenden Sie die Index (x) -Funktion. Sehen Sie die Dokumentation hier 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

Dies ist jedoch nicht so schnell wie bei anderen vorgeschlagenen Antworten (z. B. bei der Aufzählung). Einfach aber.

0
MoRe