23

Pythonの拡張スライス構文は、「a[n:m:k] returns every kth element from n to m」と説明されています。

これにより、kが正の場合に何を期待できるかがわかります。しかし、私はa[n:m:k]負のkを解釈する方法に迷っています。私はそれが逆になっていることを知っていますa[::-1]、そしてそれa[::-k]は逆にされたaのk番目の要素を取ります。

しかし、これはk正の定義の一般化とはどのようなものでしょうか。実際にどのように定義されているのか知りたいa[n:m:k]ので、(たとえば)理由を理解できます:

"abcd"[-1:0:-1] = "dcb"

a[n:m:-k]シーケンスaを逆にして、nから始まり、mの前で終わる元のインデックスを持つ要素を取得していますか?このパターンは私が試したnとmの他の値に適合しないため、私はそうは思いません。しかし、これが実際にどのように定義されているのか理解できず、検索してもどこにも行き着きません。

4

2 に答える 2

20

[-1:0:-1]意味:インデックスから始めて、len(string)-1上に移動し0(含まれていません)、ステップを踏み-1ます(逆)。

したがって、次のインデックスがフェッチされます。

le-1, le-1-1, le-1-1-1  .... 1  # le is len(string)

例:

In [24]: strs = 'foobar'

In [25]: le = len(strs)

In [26]: strs[-1:0:-1]  # the first -1 is equivalent to len(strs)-1

Out[26]: 'raboo'

In [27]: strs[le-1:0:-1]   
Out[27]: 'raboo'
于 2013-01-25T07:28:17.410 に答える
12

Pythonのドキュメント(これは技術的なものです。の説明range()は少しわかりやすいです)は、単純化された「すべてのk番目の要素」の説明よりも正確です。スライスパラメータは適切な名前が付けられています

slice[start:stop:step]

したがって、スライスは、で定義された場所から始まり、その場所に到達startする前に停止し、アイテムstopによって1つの位置から次の位置に移動しstepます。

于 2013-01-25T07:19:11.377 に答える