リストの最大値（最小値）のindexを取得する6つの方法を計測してみた

## 前述

[リストの最大値（最小値）のindexを取得する](http://oppython.hatenablog.com/entry/2016/05/31/205746)

上記のうぜんさんの記事に記載されている5つの方法を計測してみました｡
計測用コードについては[処理にかかる時間を計測して表示](http://qiita.com/fantm21/items/3dc7fbf4e935311488bc)を使用させていただきました｡

### 追記

コメントにて指摘のあったnumpyでの処理も追加しました｡
array→numpyの変換コストを除けば､圧倒的にnumpyが早い結果でした｡
あまりにも早すぎたので､対象となる配列の要素数を1桁多くしました｡

## 結果

- list_name.index(max(list_name))
    - 0.027699708938598633[sec] 
- max(enumerate(list_name), key=lambda x: x[1])[0]
    - 0.15381669998168945[sec] 
- max(range(len(list_name)), key=lambda i: list_name[i])
    - 0.1455528736114502[sec] 
- max(enumerate(list_name), key=operator.itemgetter(1))[0]
    - 0.09561371803283691[sec] 
- max(zip(list_name, range(len(list_name))))[1]
    - 0.07018375396728516[sec] 
- [numpy変換処理込み] np_list_name.argmax()
    - 0.08819770812988281[sec] 
- [numpy変換処理抜き] np_list_name.argmax()
    - 0.0008273124694824219[sec] 

## 実行結果､実装コード

出力結果(一部)

```pycon

elapsed_time:0.027699708938598633[sec] 
elapsed_time:0.15381669998168945[sec] 
elapsed_time:0.1455528736114502[sec] 
elapsed_time:0.09561371803283691[sec] 
elapsed_time:0.07018375396728516[sec] 
elapsed_time:0.08819770812988281[sec] 
elapsed_time:0.0008273124694824219[sec] 
[244347, 674860, 655894, 255695, 678218, 531167, 17071, 288341, 429050, 146444, 291065, 27607, 556887, 298302, 515557, 271078, 883608, 9098, 752318, 276251, 349950, 133988, 955108, 322233, 613472, 844009, 298534, 485112, 106167, 516815, 865031, 286926, 413458, 883781, 910152, 942716, 913758, 853043, 377110, 527816, 478540, 920741, 770539, 169002, 820915, 231827, 423725, 673925, 182482, 14842, 515316, 999412, 152994, 986206, 851899, 403318, 137434, 163888, 46630, 347440, 920191, 506127, 935566, 981816, 353811, 196066, 106365, 739729, 62010, 426593, 

```
実装コード

```py3

import time
import random
import numpy as np

list_name = []
max_value = 1000000

for i in range(max_value ):
    list_name.append(random.randint(1,max_value))

start = time.time()
list_name.index(max(list_name))
elapsed_time = time.time() - start
print("elapsed_time:{0}".format(elapsed_time) + "[sec]")

start = time.time()
max(enumerate(list_name), key=lambda x: x[1])[0]
elapsed_time = time.time() - start
print("elapsed_time:{0}".format(elapsed_time) + "[sec]")

start = time.time()
max(range(len(list_name)), key=lambda i: list_name[i])
elapsed_time = time.time() - start
print("elapsed_time:{0}".format(elapsed_time) + "[sec]")

import operator

start = time.time()
max(enumerate(list_name), key=operator.itemgetter(1))[0]
elapsed_time = time.time() - start
print("elapsed_time:{0}".format(elapsed_time) + "[sec]")

start = time.time()
max(zip(list_name, range(len(list_name))))[1]
elapsed_time = time.time() - start
print("elapsed_time:{0}".format(elapsed_time) + "[sec]")

# numpy (array→numpy変換処理込み)
start = time.time()
np_list_name = np.array(list_name)
np_list_name.argmax()
elapsed_time = time.time() - start
print("elapsed_time:{0}".format(elapsed_time) + "[sec]")

# numpy (array→numpy変換処理抜き)
np_list_name2 = np.array(list_name)
start = time.time()
np_list_name2.argmax()
elapsed_time = time.time() - start
print("elapsed_time:{0}".format(elapsed_time) + "[sec]")

print(list_name)
```

## 蛇足

ブログのコメントで伝えようとしたらコメント欄が見つかりませんでした｡
届け､この思い｡

~~そして一番結果の早いコードでも､とある問題が解決出来ず...もっと良い方法をご存知の方はぜひお教えください｡~~
→解決しました！