354

Python で部分文字列を取得するようなものを使用できることは知っていますstring[3:4]が、 の 3 はどういう意味somesequence[::3]ですか?

4

11 に答える 11

332

これは、「最初の引数には何もせず、2 番目の引数には何もせず、3 ずつジャンプする」ことを意味します。スライスされたシーケンスの 3 番目ごとの項目を取得します。 拡張スライスが必要です。Python 2.3 の新機能

于 2010-08-10T20:24:20.663 に答える
214

Python シーケンス スライス アドレスは として記述できa[start:end:step]、start、stop、または end のいずれかをドロップできます。 a[::3]シーケンスの 3 番目ごとの要素です。

于 2010-08-10T20:24:08.883 に答える
112

seq[::n]シーケンス全体の各n- 番目のアイテムのシーケンスです。

例:

>>> range(10)[::2]
[0, 2, 4, 6, 8]

構文は次のとおりです。

seq[start:end:step]

したがって、(Python 2で)次のことができます。

>>> range(100)[5:18:2]
[5, 7, 9, 11, 13, 15, 17]
于 2010-08-10T20:24:22.570 に答える
74

説明

s[i:j:k]ドキュメントによると、「ステップ k を使用した i から j までの s のスライス」です。iとが存在しない場合j、シーケンス全体が想定されるため、s[::k]「k 番目の項目ごと」を意味します。

まず、リストを初期化しましょう。

>>> s = range(20)
>>> s
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]

から 3番目の項目ごとに取りましょうs:

>>> s[::3]
[0, 3, 6, 9, 12, 15, 18]

から 3番目の項目ごとに取りましょうs[2:]:

>>> s[2:]
[2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19]
>>> s[2::3]
[2, 5, 8, 11, 14, 17]

から 3番目の項目ごとに取りましょうs[5:12]:

>>> s[5:12]
[5, 6, 7, 8, 9, 10, 11]
>>> s[5:12:3]
[5, 8, 11]

から 3番目の項目ごとに取りましょうs[:10]:

>>> s[:10]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> s[:10:3]
[0, 3, 6, 9]
于 2010-08-10T20:33:02.683 に答える
21

Python でスライスする場合、3 番目のパラメーターはステップです。他の人が述べたように、概要についてはExtended Slicesを参照してください。

この知識で[::3]は、スライスの開始インデックスまたは終了インデックスを指定していないことを意味します。ステップ を指定したため、これは最初のインデックスから開始して33 エントリごとに実行されます。something例えば:

>>> '123123123'[::3]
'111'
于 2010-08-10T20:24:08.030 に答える
6

3番目のパラメーターはステップです。したがって、[::3]はリスト/文字列の3番目ごとの要素を返します。

于 2010-08-10T20:24:28.477 に答える
4

Python は、:: を使用して、End、Start、および Step 値を区切ります。

于 2012-03-28T21:46:09.180 に答える