Если мне нужно максимальное значение в списке, я могу просто написать max(List)
, но что, если мне также нужен индекс максимального значения?
Я могу написать что-то вроде этого:
maximum=0
for i,value in enumerate(List):
if value>maximum:
maximum=value
index=i
Но это выглядит утомительно для меня.
И если я напишу:
List.index(max(List))
Затем он будет повторять список дважды.
Есть ли способ лучше?
Ответы:
Есть много вариантов, например:
источник
key
функция используется только для определения максимального элемента. Элементы не изменены.key=lambda e: e[1]
вместо этого и тем самым избежать импорта?itemgetter()
быстрее, и избегание импорта не является целью, которую стоит преследовать. В некоторых случаях может быть целесообразно избежать внешних зависимостей, но импорт из стандартной библиотеки не является проблемой.Я думаю, что принятый ответ великолепен, но почему бы вам не сделать это явно? Я чувствую, что больше людей поймут ваш код, и это согласуется с PEP 8:
Этот метод также примерно в три раза быстрее принятого ответа:
Результаты, как они работают на моем компьютере:
Другой набор:
источник
numpy.argmax()
, что на моей машине еще в 30 раз быстрее. Если список содержит более сложные объекты, чем простые числа, подход в моем ответе может стать быстрее. Еще одно преимущество этого подхода состоит в том, что он может использоваться для произвольных итераторов, а не только для списков.Этот ответ в 33 раза быстрее, чем @Escualo, при условии, что список очень большой, и при условии, что это уже np.array (). Мне пришлось уменьшить количество прогонов теста, потому что тест рассматривает 10000000 элементов, а не только 100.
Результаты на моем компьютере:
источник
numpy.argmax
выглядит потрясающе, пока вы не дадите ему обработать стандартный список Python. Тогда скорость лежит между явной и неявной версией. я думаюnp.array
что не просто создает список, но он сохраняет некоторую дополнительную информацию в нем - например, минимальные и максимальные значения (просто гипотеза).Со встроенной библиотекой Python это довольно просто:
Это говорит,
max
чтобы найти наибольшее число в списке[0, 1, 2, ..., len(a)]
, используя пользовательскую функциюlambda x: a[x]
, которая говорит, что0
на самом деле2
,1
есть на самом деле9
, и т. Д.источник
источник
max
узнать, просто учитывать первый элемент каждого tuple (v
) при вычислении максимального значения?Я бы предложил очень простой способ:
Надеюсь, поможет.
источник
Если максимальное значение присутствует более одного раза, и вы хотите получить все индексы,
источник
Может быть, вам все равно нужен отсортированный список?
Попробуй это:
источник
sorted_list
имеет не индексы, а значения, поэтому он не будет работать.извините за возрождение этой темы, но думал, что мой метод стоит добавить.
Имя списка в этом примере «список»
Это напечатает самое высокое значение в списке просто!
list.sort()
сортирует список по значению элемента в таблице ASCII , поэтому эффективно сортирует список по возрастанию. Затем я просто печатаю последнее значение в списке (которое будет наибольшим числом), используяprint(list[-1])
.Надеюсь это поможет!
источник
Вот полное решение вашего вопроса с использованием встроенных функций Python:
источник