8

[N, N-1, ..., 0]Pythonでリストを取得する最良の方法は何ですか? 私は2つの方法を考えています

>>> range(10)[::-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

>>> range(9, -1, -1)
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
4

5 に答える 5

11
range(N, -1, -1) is better

時間が大幅に短縮されていることがわかります。

N = 10000

%timeit range(N+1)[::-1]
1000000 loops, best of 3: 767 ns per loop

%timeit range(N, -1, -1)
1000000 loops, best of 3: 334 ns per loop

ではrange(N+1)[::-1]、最初に とまったく同じことをrange(N, -1, -1)行い、次にリストを逆にするため、時間がかかります。

于 2013-11-07T15:11:50.623 に答える
3

数値のリストが潜在的に大きい場合、または実際にはリストが必要ではなく、範囲を反復するだけの場合は、次を使用して実際にリストを作成することを避けることができます

xrange(N, -1, -1)

以下のコメントで Rob が述べたように、この動作は Python 3 での新しいデフォルト (実際のリストではなくジェネレーターを返す) ですが、Python 2 ではrange()リストxrange()を返すものとジェネレーターを返すものがあります。

于 2013-11-07T15:12:13.803 に答える
1
import timeit

print timeit.timeit("range(10)[::-1]", number=10000000)
print timeit.timeit("range(9, -1, -1)", number=10000000)

私のマシンでの出力

2.99922299385
2.24587512016

2番目の方が少し速いように見えるので、使用してくださいrange(9, -1, -1)

于 2013-11-07T15:12:28.853 に答える
0

2番目の方法は、少し高速です。

%timeit range(9,-1,-1)
> 1000000 loops, best of 3: 496 ns per loop

%timeit range(10)[::-1]
> 1000000 loops, best of 3: 659 ns per loop
于 2013-11-07T15:12:39.543 に答える