3

私はPythonが初めてで、スライスに関するいくつかのチュートリアルを読みましたが、アイドル状態で実行した例は、期待どおりに返されないようです。たとえば、次のリストを変数に割り当てましたa

a=[0,1,2,3,4,5,6,7,8,9]

今、私はスライスが次のようになることを理解しています[number I want to include:number up to and don't want to include:step]

したがって、私がそうするならa[1]、私は期待するでしょう1。もしそうならa[1:3]、それは1,2

もしそうならa[-1]、私は得ますが、私が9そうしてもa[-1:-5]、何も得られません。私が見るのはすべてです[]。何故ですか?私は見ることを期待します9,8,7,6

Windows 7 Professional で Python 2.7 を実行しています

4

2 に答える 2

3

この場合、必要なstepものを取得するには、引数を追加する必要があります。

In [1]: a=[0,1,2,3,4,5,6,7,8,9]

In [2]: a[-1:-5:-1]
Out[2]: [9, 8, 7, 6]

もう少しスペースを節約したい場合は、最初の引数を省略できます。

In [3]: a[:-5:-1]
Out[3]: [9, 8, 7, 6]

Python が「負の」スライスを処理する方法lenは、オブジェクトを負の数に追加することです。したがって、 In と言うときa[-1:-5]、それは基本的に と言っていますa[(-1+10):(-5+10)]、これは に等しくa[9:5]start/endは2つの間のすべての文字を参照するため(リストを「前方」に移動します)、何も返しません(したがって、空白のリスト)。これは、次のようにして確認できます。

In [5]: a[-5:9]
Out[5]: [5, 6, 7, 8]

In [6]: a[5:9]
Out[6]: [5, 6, 7, 8]

から、負のインデックスと正のインデックスで同じ結果が得られます-5 + 10 = 5

-1step引数を指定すると、最初の要素から開始するように指示されますが、開始位置から後方に移動します。

于 2012-12-02T19:02:56.277 に答える
2

スプライシングを数値そのものではなく、インデックスへのポインターと考えるとよいと思います。

                      +---+---+---+---+---+---+---+---+---+---+
                      | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 |
                      +---+---+---+---+---+---+---+---+---+---+
                        0   1   2   3   4   5   6   7   8   9
                      -10  -9  -8  -7  -6  -5  -4  -3  -2  -1

したがって、スライスするときはa[-1:-5]、インデックス 9 から開始し、インデックス 5 まで下ります。そのスライスには何もありません。を実行するa[-5:-1]と、インデックス 5 からインデックス 9 まで開始されます。

RocketDonkey は正しいです[9, 8, 7, 6]。必要に応じて、後退する必要があります。

于 2012-12-02T19:18:28.890 に答える