Вопрос по indexing, python, max, list – Индекс нахождения Python максимальный в списке

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

Я могу получить максимальное значение в массиве (without using max() конечно...). Как я могу получить индекс (позицию) этого значения? Пожалуйста, постарайтесь сохранить простоту, не используя новые ключевые слова Python или встроенные функции. Спасибо!

Итак, я правильно думаю, что вы знаете, чтоmax это правильный, лаконичный и эффективный метод для этого в Python, но вы ищете способыhow not to do it? Jon Clements♦
дубликатstackoverflow.com/questions/3989016/… ? Andre Holzner
“without using max() of course” & # X2013; Я правильно понял, что вы не хотите использовать встроенную функцию, верно? poke
Это также зависит от определения «встроенных функций», как (например)if number > max может быть рассмотрен с использованием встроенного метода__gt__ встроенного типаlist :) Если серьезно - почему вы не можете просто использовать встроенныйmax - просто интеллектуальное упражнение или самоистязание? Jon Clements♦
Да, я надеялся на ответ, подобный приведенному ниже. Я пытаюсь научиться программированию трудным путем, прежде чем я смогу использовать встроенные функции;) Shankar Kumar

Ваш Ответ

9   ответов
22

В моем коде я бы использовал это:

>>> max(enumerate(a),key=lambda x: x[1])[0]
3
Или даже:max(zip(a, range(len(a)))[1] хотя, если два элемента равны, это вернет элемент с самым высоким индексом, а ваш вернет элемент с самым низким индексом.
С другой стороны,max(range(len(a)), key=lambda i: a[i])
0

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

Однако это не так быстро, как другие предлагаемые ответы (например, с использованием перечисления). Все просто.

3

import numpy as np
np.array(a).argmax()
-2

Если у вас просто целые числа, вы можете заменить число с плавающей точкой на 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()))

8

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(), а также даст правильные ответы для списков, которые состоят только из отрицательных значений, es.

Previous solution

a.index(max(a))

сделает свое дело.

Встроенная функцияmax(a) найдет максимальное значение в вашем спискеaи список функций index(v) найдет индекс стоимостиv в вашем списке. Комбинируя их, вы получаете то, что ищете, в данном случае значение индекса3.

Обратите внимание, что.index() найдет индексfirst соответствующий элемент в списке, поэтому если у вас есть несколько идентичных тегов "max" значения, индекс будет возвращен для первого.

Для дополнительной информации:

max() index()

В духе «Простое лучше, чем сложное». (Дзен питона)

@ShankarKumar Извините, я прочитал ваш вопрос слишком быстро, я обновил свой ответ только к вашему сведению.
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)
7

просто итерируйте с индексом вместо использования цикла foreach.

for i in range(len(a)):
    if a[i] > max:
        max = a[i]
        maxIndex = i
@ShankarKumar Быть педантомrange а такжеlen встроенные функции :)
Я мог бы использовать перечислить, а не диапазон.
Спасибо, это то, что я искал. Что-то, что не использовало никаких встроенных функций! :) Shankar Kumar
Это тени встроенная функцияmax (что, возможно, не является проблемой, поскольку мы не предполагаем его использовать .. :-), но, вероятно, не является хорошей практикой и не будет работать правильно для списков, которые содержат только отрицательные значения
@Levon В любом случае вы не должны присваивать max нулю перед списком, вы должны установить его на первый элемент в списке.
19

Простой вкладыш:

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

Это позволяет избежать необходимости.index() список после.

Как примечание, если в списке есть дубликаты, он вернет самый большой индекс, в котором находится элемент max.(5,3) < (5,4) возвращаетсяTrue
0

это намного проще

x.index(max(x)) #where x is your list

Похожие вопросы