そのため、スライスのストライドパラメーターを実際に扱うことはできません。
たとえば、"123456"[::-2]
を生成"642"
しますが、なぜ"123456"[1::-2]
生成"2"
して"123456"[2::-2]
生成するの"31"
でしょうか?
5 に答える
説明する最も簡単な方法は、おそらくあなたの例に対処することです:
"123456"[::-2]
# This takes the whole string ([::])
# Then it works backward (-)
# and it does every other character (2)
"123456"[1::-2]
# This is also working backward (-)
# every other character (2)
# but starting at position 1, which is the number 2.
"123456"[2::-2]
# Again, working backward (-)
# Every other character (2)
# begin at position 2, so you end up with positions 2, and 0, or '31'
スライス構文は[<start>:<end>:step]
. <start>
が省略され、ステップが負の場合、文字列の最後から開始されます。
構文がstring[start:end:step]
"123456"[::-2]
最後の文字から始まるため、「642」を生成します。これは、スライスが実行される位置を指定しなかったためです。したがって、最後の文字から最初の文字に到達するまで2文字戻ります。
"123456"[1::-2]
Pythonに2番目の文字(文字列のインデックス1)から開始するように指示し、Pythonにその位置から2ステップ戻るように指示したため、「2」が生成されます。この場合、Pythonは明らかに「2」だけを返します。これは、Pythonが2ステップ戻ろうとしたときに、1ステップだけで文字列の最初の文字にヒットしたためです。
"123456"[2::-2]
これで、これを理解できるはずです。とにかく説明します。したがって、Pythonに3番目の文字(またはインデックス2)から開始し、最初の文字に到達するまでそこから2ステップ戻るように指示しました。したがって、「3」から開始して2ステップ戻ると、誤って最初の文字(たまたま「1」)に到達します。したがって、Pythonは「31」を提供します
インデックスはゼロから始まることに注意してください。'012345'
これを念頭に置いて、文字列を次のように変更すると、より明確になる場合があります。
In [1]: '012345'[1::-2]
Out[1]: '1'
In [2]: '012345'[2::-2]
Out[2]: '20'
In [3]: '012345'[5::-2]
Out[3]: '531'
ご覧のとおり、スライスは正しいインデックスから開始し、文字列の先頭に到達するまで、各ステップで正しい (負の) ストライドを実行します。
strideを使用している場合、基本的に2つのパラメーターがあります。(ストライドを開始するためのインデックス、ストライド間隔)
"1234"[index::interval]
刺し傷はゼロからインデックス付けされていることを覚えておいてください。
"123456"[2::-2]
インデックス2または「3」から開始し、間隔内でそれぞれを取得すると言っています。
"31"