可能性のある複製:
必要なインデックスのみ:列挙または(x)範囲?
これらのうちどれがより良い/より明確/より高速/より「Pythonic」であると考えられますか?リストL
の内容は気にせず、どれだけ長いかを考えます。
_a = [f(n) for n, _ in enumerate(L)]
_
または
_a = [f(n) for n in range(len(L))]
_
違いがある場合、関数f
はlen(list)
も使用します。
いくつかのクイックタイミングランは、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()
。
(x)rangeソリューションの方がオーバーヘッドが少ないため、より高速なので、私はそれを使用します。
Python 2.xでは、xrange
は一時ファイルを作成しないため、メモリ使用量が少ないため、range
ではなくxrange
を使用します。 Python 3.xでは、メモリ量の少ないバージョンであるrange
のみです。
Python 2.xを使用していると仮定すると、len()
を使用する場合は、xrange()
を使用する必要があります。これは、数値のリストの作成を回避するためです。範囲内。
この場合、リストの項目ではなくインデックスを使用しているので、len()
を使用します。
Enumarate関数の "_"属性を使用していないので、範囲を使用すると読みやすくなります。