私はいつも、範囲外のスライスを許可するシーケンスの動作がややおかしいと感じています。ただし、これは文書化されています。具体的には、シーケンス型のスライスについて説明している箇条書き 4:
i から j までの s のスライスは、i <= k < j であるようなインデックス k を持つアイテムのシーケンスとして定義されます。i または j が len(s) より大きい場合は、len(s) を使用します。i が省略または None の場合は 0 を使用します。j が省略または None の場合は、len(s) を使用します。i が j 以上の場合、スライスは空です。
または、オプションの stride パラメータを使用したスライスについて説明する箇条書き 5:
ステップ k を使用した i から j までの s のスライスは、0 <= n < (ji)/k を満たすインデックス x = i + n*k を持つアイテムのシーケンスとして定義されます。つまり、インデックスは i、i+k、i+2*k、i+3*k などであり、j に達すると停止します (ただし、j は含まれません)。i または j が len(s) より大きい場合は、len(s) を使用します。i または j が省略されるか None の場合、それらは「終了」値になります (終了は k の符号に依存します)。k をゼロにすることはできません。k が None の場合、1 のように扱われます
ポイント 3 ( を説明s[index]
) を見ると、境界外インデックスから境界内インデックスへの対応する変換がないことに注意してください。