重複の可能性:
必要なインデックスのみ:列挙または(x)範囲?
これらのうち、より良い/より明確な/より速い/より多くの「Pythonic」と見なされるのはどれですか?リストの内容は気にせずL
、どれだけの長さかは気にしません。
a = [f(n) for n, _ in enumerate(L)]
また
a = [f(n) for n in range(len(L))]
違いがあれば、関数もf
利用len(list)
します。
重複の可能性:
必要なインデックスのみ:列挙または(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()
可能な場合(つまり、Pre-Python v 3.x)を使用し、次にrange()
とを使用しますenumerate()
。
(x)rangeソリューションはオーバーヘッドが少ないため高速であるため、これを使用します。
Python 2.xでは、一時リストが作成されないため、使用するメモリが少ないため、xrange
の代わりに使用します。Python 3.xには、メモリの少ないバージョンである、のみがあります。range
xrange
range
したがって、Python 2.xでは、繰り返しrange(n)
はO(n)メモリを一時的に使用し、繰り返しxrange(n)
はO(1)メモリを一時的に使用します。ランタイムは両方ともO(n)です。
enumarate関数の「_」属性を使用していないので、範囲を使用すると読みやすくなります。
Python 2.xを使用していると仮定すると、を使用する場合は、範囲内の数値のリストが作成されないようにするためにlen()
使用する必要があります。xrange()
len()
そしてこの場合、リスト内のアイテムではなく、インデックスを使用しているので、私は一緒に行きます。