2016-07-10 5 views
2

私はPythonのスライスを扱っていますが、私は予期しない結果に遭遇しました。このスライス動作は定義されていますか?

例:

print([1, 2, 3][0:-4:-1]) 

戻り[1]

print([1, 2, 3][0:-3:-1]) 
print([1, 2, 3][0:-2:-1]) 
print([1, 2, 3][0:-1:-1]) 

これら戻り[](予想通り)のそれぞれ。

どうしますか?

ありがとう、Reyha24。

+0

最初の例についてのみ質問していますか? – zondo

+0

@zondo:はい。他のものは私には明らかです。 – Reyha24

+0

これは定義された動作です。 '[1、2、3] [2:3]'と似ています。 – user2357112

答えて

2

sliceには、最初の項目(開始)が含まれています。 2番目の引数(停止)はexである。 -3のストップが与えられると、1から1になることを意味します。停止は排他的であるため、唯一の項目は除外され、結果は空です。 -2を指定すると、インデックス1に変換されます。インデックス0が指定されるとすぐに、ステップが負であるため、インデックス1をすでに通過しています。したがって、結果は空です。 -1と似たようなものが得られます。ただし、最後から-4をとると、リストには3つの項目しかないので-1になります。負のステップで0から-1まで行くことができます。インデックス0が含まれ、インデックス-1は後でリストに表示されるためではありません。

+0

ありがとう、zondo。あなたの答えは素晴らしいです!私は何か混じったと思う。他の3つの例がどのように結果につながっているか教えていただけますか?そのルールに従えば、インデックス0の要素を含める必要があります。 – Reyha24

+1

@ Reyha24:非常に良い点。私も間違っていると思う。私の編集された答えを見てください。 – zondo

+0

あなたとTheBackCatは私にそれを明確にしました。本当にありがとう! – Reyha24

1

スライスを元に戻して通常のインデックスに変換すると、これが明確になると思います。 Pythonは半開きの間隔を使用するため、[0:-4:-1][1, 2, 3][-3:1]に変換されます。この場合の-3はインデックス0に対応しているため、最初の要素である[1, 2, 3][0:1]に変換されます。 2番目のケース[0:-3:-1][-2:1]に変換されます。これは[1:1]です。これは空です。 3番目のケースは[2:1]に変換されます。

+0

良い答え!分かりました。良い一日を過ごしてください! – Reyha24

関連する問題