2016-03-26 6 views
0

いつもPythonのスライス操作の引数を省略することにつながると考え:理解ニシキヘビは、([:: - 1])スライスを逆

  • 開始= 0
  • 端= len(lst)
  • ステップ= 1とすぐステップは「逆スライス」[::-1]、オムのように、負であるとしてステップが肯定的である場合はtrueを保持しているが、

ittingに/最終結果を開始:

  • 開始= len(lst)-1
  • 最後は= None

は、これは特殊なケースである、または私は何かが足りないのですか?

答えて

2

デフォルトはです。常にNoneです。どのように3つの値に対してNoneを扱うかを決めるのはタイプに依存します。この場合、listオブジェクトはslice(None, None, -1)オブジェクトに渡されます。 場合、私は [...]

s[i:j:k]
5.

は(リストオブジェクトを含む)Pythonのデフォルトのシーケンス型はこれらの解釈方法についてはsequence types documentationに操作テーブルに脚注5を参照してください。またはjが省略されているか、またはNoneである場合、それらは「終了」値になります(終了はkの符号に依存します)。

したがって、デフォルト値はステップ値の符号に依存します。負の場合、端が逆になります。 [::-1]の場合、最終値は、ステップが負であるため、それぞれlen(s) - 1-1(絶対的ではなく、相対的ではありません)です。

+0

なぜあなたは-1といいますか? – wim

+0

@wim:yes、最終値は*スライス*に含まれていないためです。 '0'に設定すると、その最初の要素を取得しません。 –

+1

@wim: 's [len(s) - 1:-1:-1]'を使用した場合、 'j'の値は長さに対して相対的に取られ、動作しません。 'None'のみ、または空のままにしておくと、最初の要素を含めることができます。 –

関連する問題