私は Python の初心者で、私の本の中であまり説明されていない次の例に出くわしました。これが通訳者からの私のプリントアウトです:
>>> s = 'spam'
>>> s[:-1]
'spa'
開始境界のないスライスと'-1'
、最後の要素を除くすべての要素を返すのはなぜですか? 呼び出しはs[0:-1]
論理的に呼び出しと同じs[:-1]
ですか? どちらも同じ結果を返します。しかし、pythonが正確に何をしているのかわかりません。どんな助けでも大歓迎です。
はい、呼び出しs[0:-1]
は呼び出しとまったく同じs[:-1]
です。
Python でインデックスとして負の数を使用すると、(通常の左側ではなく) リストの右側から n 番目の要素が返されます。
したがって、次のようなリストがある場合:
myList = ['a', 'b', 'c', 'd', 'e']
print myList[-1] # prints 'e'
print ステートメントは "e" を出力します。
それを理解したら (すでに混乱していることの 1 つであるかどうかは完全には明らかではありません)、スライシングについて話し始めることができます。
の行に沿ったスライスの基本を理解していることを前提としていますmyList[2:4]
(これは を返し['c', 'd']
ます)。
あなたの投稿で疑ったように、myList[:index]
は とまったく同じmyList[0:index]
です。
ちなみに、これは逆にも機能します...myList[index:]
は と同じでmyList[index:len(myList)]
、リストから始まり、最後までのすべての要素のリストを返しますindex
(たとえば、print myList[2:]
print ['c', 'd', 'e']
)。
3 番目の注意として、インデックスが指定されていない場所でも実行できます。print myList[:]
これは、基本的にリスト全体のコピーを返します (['a', 'b', 'c', 'd', 'e' を返す]と同等です)。 ]))。これは、myList がある時点で変更されると思われるが、そのコピーを現在の状態で保持したい場合に役立ちます。myList[0:len(myList)]
まだ行っていない場合は、Python インタープリターをいじるだけで、これらのことを理解する上で大きな助けになることがわかります。IPythonをお勧めします。
負のインデックスは末尾からカウントされるため、たとえば、s[:-1] は s[:len(s)-1] と同等であり、s[-1] は最後の要素です。
重要な点は、Python インデックスは、要素自体ではなく、リスト内のエントリ間のスペースへのポインターと見なす必要があるということです。したがって、0 は最初を指し、1 は最初と 2 番目の間を指し、... n は n 番目と (n+1) 番目の間を指します。
したがって、l[1:2] は、2 つのポインター間のすべてを提供するため、要素 l[1] のみを含むリストを提供します。
同様に、負のインデックスは要素間を指しますが、今回は後ろから数えるので、最後の要素と最後から 2 番目の要素の間が -1 であるため、[0:-1] は最後の要素を含まないアイテムのブロックを指します。 1。
シンタックス シュガーとして、最初から、または実際には最後から 0 を省略できるため、l[n:] は l[n] から最後までのすべてを参照します (n>=len(l) の場合、空のリスト)。
はい、スライスは次のように定義するのが最適であるため、呼び出しs[0:-1]
は論理的に同じです。s[:-1]
[beginning_index:ending_index]
Python では、コードをより簡潔にできるため、0 を省略できます。
他の何人かが見逃しているポイントに対処します。
スライスについて私たちが知っていることの文脈で、この負の指数をどのように解釈するのでしょうか?
通常、スライスを行うときは、[包括的、排他的] 境界について話します。そう
A = [1,3,4,6]
A[1:3] # will give us 3-1 = 2 elements, index 1 and 2 => [3,4]
したがって、スライスに負のインデックスがある場合、これは=があるA[1:-1]
ことを意味し、これにより再びインデックス 1 と 2 が得られ、したがって.A[1:len(A)-1]
A[1:3]
[3,4]
リストの長さは 4 ですが、最後のインデックスは 3 であるため、この -1 表記がここで機能する理由に注意してください。また、負のインデックスを変数として受け取るコードがある場合は、手動で 0 をチェックする必要があることに注意してください
A[:-0] == A[:0] == []
。