web-dev-qa-db-ja.com

Python文字列スライスストライドの明確化

そのため、スライスのストライドパラメータを実際に処理することはできません。
たとえば、"123456"[::-2]"642"を生成しますが、"123456"[1::-2]"2"を生成し、"123456"[2::-2]"31"を生成するのはなぜですか?

20
user995788

説明する最も簡単な方法は、おそらくあなたの例に取り組むことです:

"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>が省略され、ステップが負の場合、文字列の最後から始まります。

24
g.d.d.c

これは、構文が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」になります

6
Kemal Fadillah

インデックスはゼロから始まることを忘れないでください。これを念頭に置いて、文字列を'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'

ご覧のとおり、スライスは正しいインデックスから始まり、文字列の先頭に到達するまで、各ステップで正しい(負の)ストライドを取ります。

5
NPE

python構文でのスライスについて理解しましょう:

string[starting index : ending index : step]

そしてあなたの最初の例:

123456[::-2]

[::]、開始インデックスを指定せずに、文字列全体、123456を取得します

[::-2]、値-2は、2ステップごとに文字列の終わりからカウントを開始することを意味します。

したがって、642を取得します。

0
Yong En

Strideを使用する場合、基本的に2つのパラメーターがあります。 (ストライドを開始するためのインデックス、ストライド間隔)

"1234"[index::interval]

刺し傷はゼロからインデックス付けされていることを覚えておいてください。

"123456"[2::-2]

インデックス2または「3」から開始し、間隔内でそれぞれを取得すると言っています。

"31"
0
stehlikio