スライス表記はシーケンスオブジェクト (文字列、タプルまたはリスト) におけるある 範囲の要素を選択します。スライス表記は式として用いたり、代入や del 文の 対象として用いたりできます。スライス表記の構文は以下のようになります:
slicing | ::= | simple_slicing | extended_slicing |
simple_slicing | ::= | primary "[" short_slice "]" |
extended_slicing | ::= | primary "[" slice_list "]" |
slice_list | ::= | slice_item ("," slice_item)* [","] |
slice_item | ::= | expression | proper_slice | ellipsis |
proper_slice | ::= | short_slice | long_slice |
short_slice | ::= | [lower_bound] ":" [upper_bound] |
long_slice | ::= | short_slice ":" [stride] |
lower_bound | ::= | expression |
upper_bound | ::= | expression |
stride | ::= | expression |
ellipsis | ::= | "..." |
上記の形式的な構文法にはあいまいさがあります: 式リストに見えるものは、 スライスリストにも見えるため、添字表記はスライス表記としても解釈されうる ということです。 この場合には、(スライスリストの評価結果が、適切なスライスや省略表記 (ellipsis) にならない場合)、スライス表記としての解釈よりも添字表記 としての解釈の方が高い優先順位を持つように定義することで、構文法をより 難解にすることなくあいまいさを取り除いています。同様に、 スライスリストが厳密に一つだけの短いスライスで、末尾にカンマが 続いていない場合、拡張スライスとしての解釈より、単純なスライスとして の解釈が優先されます。
単純なスライスに対する意味付けは以下のようになります。
一次語の値評価結果は、シーケンス型のオブジェクトでなければなりません。
下境界および上境界を表す式がある場合、それらの値評価結果は整数で
なくてはなりません; デフォルトの値は、それぞれゼロと
sys.maxint
です。どちらかの境界値が負である場合、
シーケンスの長さが加算されます。こうして、スライスは
i および j をそれぞれ指定した下境界、上境界として、
インデクス k が i <= k < j
となる全ての
要素を選択します。
選択の結果、空のシーケンスになることもあります。i や j が
有効なインデクス範囲の外側にある場合でも、エラーにはなりません
(範囲外の要素は存在しないので、選択されないだけです)。
拡張スライスに対する意味付けは、以下のようになります。
一次語の値評価結果は、辞書型のオブジェクトでなければなりません。
また、辞書は以下に述べるようにしてスライスリストから生成された
キーによってインデクス指定できなければなりません。
スライスリストに少なくとも一つのカンマが含まれている場合、
キーは各スライス要素を値変換したものからなるタプルになります;
それ以外の場合、単一のスライス要素自体を値変換したものがキーになります。
一個の式でできたスライス要素の変換は、その式になります。
省略表記スライス要素の変換は、組み込みの Ellipsis
オブジェクト
になります。適切なスライスの変換は、スライスオブジェクト
(3.2 参照) で、start, stop および
step 属性は、それぞれ指定した下境界、上境界、および
とび幅 (stride) になります。式がない場合には、None
に置き換え
られます。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。