【Python】シーケンス型の要素を範囲指定して取得する方法【スライス】

Python

この記事では、Pythonのスライスの使い方を解説します。スライスを使うことでリストなどのシーケンス型に格納されている要素を範囲指定して取得することができます。

スライスの基本

スライスは、シーケンス型のオブジェクトに使うことができます。

以下のように、[]を使って指定します。startstopstepはどれも省略可能です。

シーケンス[start:stop:step]

シーケンス型には、以下のような型があります。

  • list(リスト)
  • tuple(タプル)
  • range(レンジ)
  • str(文字列)

【Python】シーケンス型とは?【シーケンス型の使い方】【Python】シーケンス型とは?【シーケンス型の使い方】

範囲内の要素の取得[start:stop]

startとstopを指定することで、その範囲内の要素を取得できます。取得される範囲はstart <= N < stopなのでstopの値には注意しましょう。

POINT
  • stopは、startよりも後ろの要素を指定する必要があります。

書式

startとstopのみ指定します。

シーケンス[start:stop]

サンプル

以下のコードでは「2 <= N < 4」の範囲の要素を取得します。

vals = ['a', 'b', 'c', 'd', 'e']

print(vals[2:4])

実行結果

['c', 'd']

先頭からストップまでの要素の取得[:stop]

stopのみを指定することで先頭からstop未満の要素を取得できます。取得される範囲は0 <= N < stopになります。

書式

startの値を省略してstopのみを指定します。:を忘れないように記述しましょう。

シーケンス[:stop]

これは以下のコードと等価です。

シーケンス[0:stop]

サンプル

以下のコードでは「0 <= N < 4」の要素を取得しています。

vals = ['a', 'b', 'c', 'd', 'e']

print(vals[:4])

実行結果

['a', 'b', 'c', 'd']

スタートから末尾までの要素の取得[start:]

startのみ指定することでstartから末尾までの要素を取得できます。取得される範囲はstart <= N < len(シーケンス)となります。

書式

stopを省略してstartのみを指定します。

シーケンス[start:]

これは以下のコードと等価です。

シーケンス[start:len(シーケンス)]

サンプル

以下のコードでは「2 <= N < len(vals)」の範囲の要素を取得しています。

vals = ['a', 'b', 'c', 'd', 'e']

print(vals[2:])

実行結果

['c', 'd', 'e']

要素を飛ばして取得する[::step]

stepを指定することで要素を取得する幅を定義できます。デフォルト値は1で、1つの要素のうち1つの要素を取得しています。2を指定することで2つ要素のうち1つ、3を指定することで3つの要素のうち1つ要素を取得します。

書式

stepを指定します。:を忘れないように気をつけましょう。

シーケンス[::step]

startとstopは省略しましたが、もちろん指定することもできます。

シーケンス[start:stop:step]

サンプル

stepの違いでどのように要素が取得されるのか違いを見ていましょう!

vals = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

print(vals[::2])
print(vals[::3])

実行結果

['a', 'c', 'e', 'g']
['a', 'd', 'g']

末尾から要素の取得[負の数]

負の数を使うことで末尾の要素を指定することができます。

startに負の数を指定する

末尾からの要素をstartに指定できます。

vals = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

print(vals[-1:])
print(vals[-2:])
print(vals[-3:])
print(vals[-4:])

実行結果

['g']
['f', 'g']
['e', 'f', 'g']
['d', 'e', 'f', 'g']

stopに負の数を指定する

末尾からの要素をstopに指定できます。

vals = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

print(vals[:-1])
print(vals[:-2])
print(vals[:-3])
print(vals[:-4])

実行結果

['a', 'b', 'c', 'd', 'e', 'f']
['a', 'b', 'c', 'd', 'e']
['a', 'b', 'c', 'd']
['a', 'b', 'c']

startとstopに負の数を指定する

startとstopに負の数を指定する際は、stopの方が後ろの要素を指定しているか注意が必要です。

vals = ['a', 'b', 'c', 'd', 'e', 'f', 'g'] 

print(vals[-2:-1])
print(vals[-3:-2]) 
print(vals[-4:-3])

実行結果

['f']
['e']
['d']

stepに負の数を指定する

stepに負の数を指定することで逆順で要素を取得できます。

vals = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

print(vals[::-1])
print(vals[::-2])
print(vals[::-3])

実行結果

['g', 'f', 'e', 'd', 'c', 'b', 'a']
['g', 'e', 'c', 'a']
['g', 'd', 'a']

stepに負の数を指定した場合に、startとstopを指定するには以下のようになります。

vals = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

print(vals[-1:-8:-1])
print(vals[-1:-7:-1])

print(vals[6::-1])
print(vals[5:2:-1])

実行結果

['g', 'f', 'e', 'd', 'c', 'b', 'a']
['g', 'f', 'e', 'd', 'c', 'b']
['g', 'f', 'e', 'd', 'c', 'b', 'a']
['f', 'e', 'd']

ふむ…これはややこしい!!この書き方は可読性を著しく下げるので、あまり使わない方が良いかもしれませんね。

まとめ

この記事では、Pythonのスライスの使い方を解説しました。

スライスを使うことで、for文を使わずにシーケンス型の要素を複雑に取得することができます。シーケンス型の要素を範囲取得したい場合は積極的にスライスを使いましょう。

今回の内容はここまでです。それではまたどこかで〜( ・∀・)ノ

タイトルとURLをコピーしました