Python で部分文字列を取得するようなものを使用できることは知っていますstring[3:4]
が、 の 3 はどういう意味somesequence[::3]
ですか?
11 に答える
これは、「最初の引数には何もせず、2 番目の引数には何もせず、3 ずつジャンプする」ことを意味します。スライスされたシーケンスの 3 番目ごとの項目を取得します。 拡張スライスが必要です。Python 2.3 の新機能
Python シーケンス スライス アドレスは として記述できa[start:end:step]
、start、stop、または end のいずれかをドロップできます。 a[::3]
シーケンスの 3 番目ごとの要素です。
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]
説明
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]
Python でスライスする場合、3 番目のパラメーターはステップです。他の人が述べたように、概要についてはExtended Slicesを参照してください。
この知識で[::3]
は、スライスの開始インデックスまたは終了インデックスを指定していないことを意味します。ステップ を指定したため、これは最初のインデックスから開始して3
3 エントリごとに実行されます。something
例えば:
>>> '123123123'[::3]
'111'
3番目のパラメーターはステップです。したがって、[::3]はリスト/文字列の3番目ごとの要素を返します。
Python は、:: を使用して、End、Start、および Step 値を区切ります。