スライスについて知りたいことすべて

ちょっとした紹介。 しばらくの間pythonを使用していたすべての人が括弧内の式を愛していると確信しています。 この記事では、「a」から「i」までのスライスについて説明します。 最初に、用語について少し説明します。英語では「スライス」と呼ばれます。 私は理解しているように、それらを「スライス」と呼び、次に「スライス」と呼びます。 私たちは皆、例から学びます。 私にとって、そのような方法は、最も便利で、速く、簡単です。

手始めに、最も一般的な使用法。 シーケンスまたはその一部のコピーを作成します。

シーケンスの一部としてスライスを検討してください。 たとえば、リストからのいくつかのスライス:

>>> s = [1, 2, 3, 4, 6] #  >>> s[:] # ,    [1, 2, 3, 4, 6] >>> s[1:] #     [2, 3, 4, 6] >>> s[-3:] #  3  [3, 4, 6] >>> s[2:-2] #    2 [3]
      
      





それだけではありません

誰もが知っているわけではありませんが、3つのパラメーターを持つスライスが存在する場合があります。

 >>> s[::2] #  [1, 3, 6] >>> s[1:4:2] #       2 [2, 4]
      
      





これらのアクションはすべて、行、タプル、およびリストを使用して実行できます。

 >>> "Hello Dolly!"[1::2] 'el ol!'
      
      





xeningemに感謝します

 >>> "God saw I was dog"[::-1] 'god saw I was doG' >>> #    ,    .  .
      
      





しかし、それだけではありません。リストでしか実行できないスライスのアクションがいくつかあります(まあ、ほぼ)。 実際のところ、変更できるのは基本シーケンスのみであり、順序が重要です(辞書やセット/セットからスライスを作成することはできません)。 次に、シーケンスを変更するスライスについて説明します。

スライスは削除できます。例:

 >>> s = list(range(10)) # 0..9 >>> del s[3: -2: 2] #        2 >>> s [ 0, 1, 2, 4, 6, 8, 9]
      
      





要素を挿入することもできます:

置換オプションでは:

 >>> s[2:5:2]=list("AF") #  [0, 1, 2, 4, 6, 8, 9],      ['A','F'] >>> #,       ,     >>> s [ 0, 1, 'A', 4, 'F', 8, 9]
      
      





さて、または挿入オプションは簡単です:

 >>> s[3:4] = ["4 was here"] #    >>> s [ 0, 1, 'A', '4 was here', 'F', 8, 9] >>> s[1:1] = ["after zero"] #, ,  >>> s [ 0, 'after zero', 1, 'A', '4 was here', 'F', 8, 9]
      
      





スライスをカットするクラスを作成したい場合は? これを行う場所はありません。2つの方法があります。

間違った:

1)__getslice __、__ delslice__、および__setslice__関数をオーバーライドします。 しかし、これは廃止されたメソッドです(2.0では非推奨としてマークされています)

そして正しいもの:

2)__getitem __、__ setitem__、および__delitem__をオーバーライドします。

一見、すべてが非常にシンプルに見えますが、よく見ると、__ getitem __(self、key)-パラメーター、キー、および3つの数を持つスライスのみを受け取ります...すべてが非常に単純です:誰かがしようとする場合キー値を使用してオブジェクトからピースを切り取り、関数はスライスタイプのオブジェクトを取得します。

 >>> class MySliceble(): def __getitem__(self, key): if isinstance(key, slice): return list(range(key.start, key.stop, key.step)) else: raise Exception("Trying to access by index") >>> my = MySliceble() >>> my[2:10:1] [2, 3, 4, 5, 6, 7, 8, 9]
      
      





もちろん、この例は非常に象徴的ですが、理解できます。スライスクラスのオブジェクトには、開始、停止、ステップの3つのプロパティがあり、スライスブラケットからの数字に対応しています。 番号をスキップする場合は注意が必要です。値はなしになります。たとえば、[::]はスライス(なし、なし、なし)、[:-3]はスライス(なし、-3、なし)になります。

類推によってスライスを交換/挿入および削除します。

演習として、辞書をオーバーロードして、スライスを作成できるようにすることができます。 python3では、これはクラスSliceableDict(dict)として開始されます。

さて、スライスについてのすべての並べ替え。

見逃した場合は、学習して喜んで追加します。



Upd1:5つのカルマを蓄積し、Pythonブログに転送しました。 ありがとう

Upd2:コメント、修正、補足をありがとう。



All Articles