Python

【Python】スライスの使い方

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

スライスの基本

スライスは、シーケンス型のオブジェクトに使うことができます。以下のように、[]とを使って指定します。startstopstepはどれも省略可能です。

シーケンス[start:stop:step]
【Python】シーケンス型とは?【シーケンス型の使い方】この記事では、Pythonのシーケンス型について解説します。 シーケンス型とは? シーケンス型とは、順番を持った複数...

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

書式

startとstopを指定することで、start <= N < stopの要素を取得できます。

シーケンス[start:stop]
POINT

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

サンプル

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

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

print(vals[2:4])

実行結果

['c', 'd']

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

書式

stopのみを指定することで、0 <= N < stopの要素を取得できます。:を忘れずに記述しましょう。

シーケンス[:stop]

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

シーケンス[0:stop]

サンプル

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

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

print(vals[:4])

実行結果

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

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

書式

startのみ指定することでstartから末尾までの要素を取得できます。

シーケンス[start:]

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

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

サンプル

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

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

print(vals[2:])

実行結果

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

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

書式

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']

stepが2の場合は、1つ空けて要素が取得されました。stepが3の場合は、2つ空けて要素が取得されました。

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

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

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

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

【おすすめ】Python参考書