Ответ 1
Если вам не разрешено использовать встроенную функцию index(), просто используйте итерацию с индексом вместо использования цикла foreach.
for i in range(len(a)):
if a[i] > max:
max = a[i]
maxIndex = i
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()
списка после.
Update:
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()
найдет индекс первого элемента в списке, который соответствует, поэтому, если у вас было несколько одинаковых значений "max", возвращаемый индекс был бы первым для.
Для получения дополнительной информации:
В духе "Простой лучше, чем сложный". (Дзен Питона)
Используйте метод argmax объекта numpy.array.
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)
Используйте функцию 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
Однако это не так быстро, как другие предлагаемые ответы (например, с использованием перечисления). Простой, хотя.
это проще.
x.index(max(x)) #where x is your list
Если вам нравится мощный код, вам это понравится:) Если у вас есть только целые числа, вы можете заменить float на int.
maximum = max (map (float, [2,1,5,234,3,44,7,6,4,5,9,11,12,14,13]))
Если у вас есть ваш вход в текстовый файл, сделайте следующее:
file.txt2 1 5 234 3 44 7 6 4 5 9 11 12 14 13
maximum = max (map (float, (open ('file.txt', 'r'). readline()). split()))