web-dev-qa-db-ja.com

range(len(list))またはenumerate(list)?

可能性のある複製:
必要なインデックスのみ:列挙または(x)範囲?

これらのうちどれがより良い/より明確/より高速/より「Pythonic」であると考えられますか?リストLの内容は気にせず、どれだけ長いかを考えます。

_a = [f(n) for n, _ in enumerate(L)]
_

または

_a = [f(n) for n in range(len(L))]
_

違いがある場合、関数flen(list)も使用します。

24

いくつかのクイックタイミングランは、range()を使用した2番目のオプションにenumerate()のわずかなエッジを与えるようです:

_timeit a = [f(n) for n, _ in enumerate(mlist)]
10000 loops, best of 3: 118 us per loop

timeit a = [f(n) for n in range(len(mlist))]
10000 loops, best of 3: 102 us per loop
_

xrange()(Python v2.7.2)を使用して楽しみます

_timeit a = [f(n) for n in xrange(len(mlist))]
10000 loops, best of 3: 99 us per loop
_

私は読み取り可能なコードを最初にを優先し、次にxrange()を使用します(つまり、Python v 3.xより前)。次にrange()enumerate()

26
Levon

(x)rangeソリューションの方がオーバーヘッドが少ないため、より高速なので、私はそれを使用します。

Python 2.xでは、xrangeは一時ファイルを作成しないため、メモリ使用量が少ないため、rangeではなくxrangeを使用します。 Python 3.xでは、メモリ量の少ないバージョンであるrangeのみです。

6
pts

Python 2.xを使用していると仮定すると、len()を使用する場合は、xrange()を使用する必要があります。これは、数値のリストの作成を回避するためです。範囲内。

この場合、リストの項目ではなくインデックスを使用しているので、len()を使用します。

2
kindall

Enumarate関数の "_"属性を使用していないので、範囲を使用すると読みやすくなります。

1
Ctrlspc