9

2 つのスライス操作を 1 つに結合するスマートで簡単な方法はありますか?

次のようなものがあるとしましょう

arange(1000)[::2][10:20]
>>> array([20, 22, 24, 26, 28, 30, 32, 34, 36, 38])

もちろん、この例ではこれは問題ではありませんが、配列が非常に大きい場合は、中間配列の作成を避けたいと思います (または何もありませんか?)。2 つのスライスを組み合わせることは可能だと思いますが、何かを監視している可能性があります。したがって、アイデアは次のようになります。

arange(1000)[ slice(None,None,2) + slice(10,20,None) ]

これはもちろん機能しませんが、私がやりたいことです。スライス オブジェクトを結合するものはありますか? (私の努力にもかかわらず、私は何も見つけられませんでした)。

4

5 に答える 5

0

を使用できますislice。これはおそらく高速ではありませんが、ジェネレーターとして機能することで中間エントリを回避します。

arange = range(1000)

from itertools import islice
islice(islice(arange, None, None, 2), 10, 20)

%timeit list(islice(islice(arange, None, None, 2), 10, 20))
100000 loops, best of 3: 2 us per loop

%timeit arange[::2][10:20]
100000 loops, best of 3: 2.64 us per loop

というわけで、もう少し速く。

于 2013-10-08T20:32:42.387 に答える
-1

非常に簡単です:

arange(1000)[20:40:2]

すべき

于 2013-10-08T20:19:09.280 に答える