Pythonでのスライスの仕組み 質問する

Pythonでのスライスの仕組み 質問する

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 の場合はデフォルト)。stopstartstep

もう 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])Nonea[start:]a[slice(start, None)]a[::-1]a[slice(None, None, -1)]

ベースの表記法は単純なスライスに非常に役立ちますが:、オブジェクトを明示的に使用すると、slice()スライスのプログラムによる生成が簡素化されます。

おすすめ記事