Python のスライス表記はどのように機能しますか? つまり、、などのコードを記述する場合a[x:y:z]
、a[:]
どのa[::2]
要素がスライスに含まれるかをどのように理解すればよいのでしょうか?
見るスライスと範囲の上限が排他的であるのはなぜですか?理由を知るxs[0:2] == [xs[0], xs[1]]
[..., xs[2]]
には、
元のリストのN番目ごとの項目を含む新しいリストを作成するについてxs[::N]
は、
リストスライスでの割り当てはどのように機能しますか?何ができるかを学ぶxs[0:2] = ["a", "b"]
。
ベストアンサー1
構文は次のとおりです。
a[start:stop] # items start through stop-1
a[start:] # items start through the rest of the array
a[:stop] # items from the beginning through stop-1
a[:] # a copy of the whole array
step
上記のいずれでも使用できる値もあります。
a[start:stop:step] # start through not past stop, by step
覚えておくべき重要な点は、値が選択されたスライスにない:stop
最初の値を表すということです。したがって、との差は選択された要素の数です ( が1 の場合はデフォルト)。stop
start
step
もう 1 つの特徴は、start
またはが負のstop
数になる可能性があることです。つまり、配列の先頭ではなく末尾からカウントされます。つまり、次のようになります。
a[-1] # last item in the array
a[-2:] # last two items in the array
a[:-2] # everything except the last two items
同様に、step
負の数になることもあります。
a[::-1] # all items in the array, reversed
a[1::-1] # the first two items, reversed
a[:-3:-1] # the last two items, reversed
a[-3::-1] # everything except the last two items, reversed
Python は、要求した項目よりも少ない項目がある場合でもプログラマーに優しいです。たとえば、要求した項目に 1 つの要素しか含まれていない場合a[:-2]
、a
エラーではなく空のリストが返されます。エラーの方が望ましい場合もあるため、このようなことが発生する可能性があることに注意する必要があります。
slice
オブジェクトとの関係
あslice
物体スライス操作を表すことができます。
a[start:stop:step]
は以下と同等です:
a[slice(start, stop, step)]
スライス オブジェクトも、 と同様に、引数の数に応じてわずかに異なる動作をします。つまり、 とのrange()
両方がサポートされています。特定の引数の指定を省略するには、 を使用します。これにより、たとえば はと同等になり、 はと同等になります。slice(stop)
slice(start, stop[, step])
None
a[start:]
a[slice(start, None)]
a[::-1]
a[slice(None, None, -1)]
ベースの表記法は単純なスライスに非常に役立ちますが:
、オブジェクトを明示的に使用すると、slice()
スライスのプログラムによる生成が簡素化されます。