2

括弧内では、Python のスライスの省略形はスライス オブジェクトのタプルを自動生成します。

class Foo(object):
    def __getitem__(self, key):
        print key

Foo()[1::, 2:20:5]

これは印刷され(slice(1, None, None), slice(2, 20, 5))ます。ただし、私が知る限り、この省略形は括弧の外では機能しません。

他のコンテキストでスライスの省略形を使用する方法はありますか? 渡されたものを単純に返すダミー オブジェクトを定義することもできます。これ__getitem__により、少なくとも簡略構文を使用してスライス タプルを生成する方法が得られます。もっとpythonicな方法はありますか?

4

2 に答える 2

3

NumPy には、s_これを行うオブジェクトがあります。

>>> np.s_[2::2]
slice(2, None, 2)

スライスを簡単に作成したいときにいつでも設定s_ = Foo()して使用するだけで、これの独自のバージョンを簡単に作成できます。s_

于 2012-08-16T08:49:51.397 に答える
2

印刷されたものは、実際には良い手がかりです。slice() グローバル関数を使用してスライス オブジェクトを直接作成できます。これらは、リストからの索引付けに使用して渡すことができます。

s = slice(1, 10, 2)
numbers = list(range(20))
print numbers[s]
print numbers[1:10:2]

これにより、同じ結果が [1, 3, 5, 7, 9] のように 2 回出力されます。

スライス インスタンスには、いくつかの属性とメソッドがあります。詳しくは help(slice) をご覧ください。

于 2012-08-16T04:13:44.570 に答える