Допустим, у вас есть список values = [3,6,1,5]
, и вам нужен индекс наименьшего элемента, т. Е. В данном случае index_min = 2
.
Избегайте решения с itemgetter()
, представленного в других ответах, и используйте вместо него
index_min = min(xrange(len(values)), key=values.__getitem__)
потому что не требуется import operator
и не использовать enumerate
, и это всегда быстрее (тест ниже), чем решение, использующее itemgetter()
.
Если вы имеете дело с пустыми массивами или можете позволить себе numpy
в качестве зависимости, рассмотрите также использование
import numpy as np
index_min = np.argmin(values)
Это будет быстрее, чем первое решение, даже если вы примените его к чистому списку Python, если:
- это больше, чем несколько элементов (около 2 ** 4 элементов на моей машине)
- вы можете позволить себе копию памяти из чистого списка в
numpy
массив
как указывает этот тест:
Я запустил бенчмарк на моей машине с python 2.7 для двух вышеупомянутых решений (синий: чистый питон, первое решение) (красный, пустое решение) и для стандартного решения на основе itemgetter()
(черный, справочное решение) ,
Тот же бенчмарк с python 3.5 показал, что методы сравнивают точно так же, как и в случае с python 2.7, представленным выше