【Python】リスト(配列)の要素をスライス(範囲指定)する

Python

はじめに

しげっち
しげっち

リスト要素を範囲指定で取得できるスライスの機能を解説するよ。

にゃーすけ
にゃーすけ

スライスといえばチーズだにゃ

しげっち
しげっち

残念ながらこれ以降チーズの話は全く出てきませんから!

要素を一つだけ取得

要素を一つだけ取得する場合は[]にインデックスで指定することで取得できます。

list_a = [1,2,3,4,5]
print(list_a[3])

# 実行結果
# 4

リストに要素を追加する方法については下記記事を参照ください。

スライス(範囲指定)について

リストの要素を複数取得する場合はスライスを使用します

記述方法

スライスは角括弧 []の中に開始位置と終了位置をコロン :で区切って記述します。

list_a[ 開始位置 : 終了位置 ]

基本のサンプル

list_a = ['a','b','c','d','e']
print(list_a[1:3])
print(type(list_a[1:3]))

#実行結果
# ['b', 'c']
# <class 'list'>

サンプルでは開始位置に、終了位置にを指定し、リストのbcを取得しました。

しげっち
しげっち

開始位置はインデックス指定だけど、終了位置はインデックス+1指定になるところが注意点だね。

にゃーすけ
にゃーすけ

スライスを使用した場合の戻り値の型はリスト型になるんだにゃあ

要素を一つだけ取得した場合

スライスで要素を一つだけ取得した場合もリスト型になります。

要素を一つだけ取得するサンプル

list_a = ['a','b','c','d','e']
print(list_a[1:2])
print(type(list_a[1:2]))

# 実行結果
# ['b']
# <class 'list'>

増分を指定する

スライス時に増分を指定することが出来ます。
増分を指定すると、奇数の要素だけ取得したり偶数の要素だけ取得することが出来ます。

list_a[ 開始位置 : 終了位置 : 増分]

増分を指定したサンプル

list_a = ['a','b','c','d','e']
print(list_a[0:5:2])

# 実行結果
# ['a', 'c', 'e']

サンプルでは奇数の要素のみ取得しました。

スライスの位置をマイナスで指定する

にゃーすけ
にゃーすけ

スライスの開始位置や終了位置にマイナスを指定したらどうなるにゃ?

マイナスを指定すると要素の最後から数えて指定できます。

開始位置をマイナス指定したサンプル

list_a = ['a','b','c','d','e']
print(list_a[-3:4])

# 実行結果
# ['c', 'd']

開始位置は最後の要素から数えて3つ目、終了位置は4つ目の要素なので、
その結果を取得しました。

終了位置をマイナス指定したサンプル

list_a = ['a','b','c','d','e']
print(list_a[1:-2])

# 実行結果
# ['b', 'c']

開始位置は1、終了位置は−2なので要素の最後から3つ目(※ここ注意)なので、
その結果、bcを取得しました。

しげっち
しげっち

終了位置がプラスの場合はインデックス+1だったけど、
マイナスの場合は純粋なインデックスになるよ。
間違いやすいので気をつけよう。

開始も終了もマイナス指定したサンプル

list_a = ['a','b','c','d','e']
print(list_a[-3:-1])

# 実行結果
# ['b', 'c', 'd']
にゃーすけ
にゃーすけ

マイナス指定は沢山の要素がある場合、
最後のいくつかの要素を取得するのに使えそうだにゃ。

増分にマイナス指定する

増分にもマイナス指定出来ます。
その場合は逆順に並んだリストが結果として返ってきます。

増分をマイナス指定したサンプル

list_a = ['a','b','c','d','e']
print(list_a[4:0:-1])
print(list_a[5:0:-2])

# 実行結果
# ['e', 'd', 'c', 'b']
# ['e', 'c']

増分に-1を指定することで逆順のリストが返ってきました。
増分に-2を指定することで逆順かつ奇数の要素を含むリストが返ってきました。

しげっち
しげっち

増分にマイナスを指定する時、
開始と終了の位置指定も逆指定になるところが注意だね。

にゃーすけ
にゃーすけ

あれ?終了位置に0を指定してるのにaの要素が取得できていないにゃ?

増分がマイナスの場合、終了位置はインデックス+1の指定になります。
よって、0を指定しても0+1で終了位置はbの要素までとなってしまいます。
要素のaまで取得したい場合は終了位置を省略することで取得できます
省略する方法は次に説明します。

しげっち
しげっち

この辺りは現実的な使用方法ではないので、あまり理解できなくても大丈夫。
次に進もう!

この方法以外にもリストを逆順に並び替える方法があります。
詳細は下記記事を参照してください。

スライスの位置指定を省略する

スライスの位置指定は省略することが出来ます。

開始位置を省略したサンプル

list_a = ['a','b','c','d','e']
print(list_a[:2])

# 実行結果
['a', 'b']

開始位置を省略すると最初の要素を指定したことになります。

終了位置を省略したサンプル

list_a = ['a','b','c','d','e']
print(list_a[1:])

# 実行結果
# ['b', 'c', 'd', 'e']

終了位置を省略すると最後の要素を指定したことになります。

開始と終了両方を省略したサンプル

list_a = ['a','b','c','d','e']
print(list_a[:])

# 実行結果
# ['a', 'b', 'c', 'd', 'e']

開始と終了両方を省略すると全ての要素を取得します。

slice関数を使用する

Pythonには標準でsliceという関数が準備されています。

sl = slice(開始位置, 終了位置)
list_a[sl]

sliceのサンプル

list_a = ['a','b','c','d','e']
sl = slice(2,4)
print(list_a[sl])

# 実行結果
# [c, d]

まとめ

Pythonのリストを範囲指定して要素を取得するスライスについて解説しました。

  • リストの要素を範囲指定して取得するにはスライスを使用する。
  • スライスは開始位置、終了位置、必要に応じて増分を指定する。
  • 開始位置、終了位置をマイナスで指定すると要素の最後から指定できる。
  • 増分にマイナスを指定すると要素を逆順に取得できる。
  • slice関数を用いてもリスト要素の範囲指定ができる。
にゃーすけ
にゃーすけ

にゃーすけも食べ物リストのサンプルを作ってみるにゃ。
アイス、ケーキ、シュークリーム、どら焼き、羊羹・・・

しげっち
しげっち

いや全部デザート!

最後まで見ていただきありがとうございました。

リスト要素の削除にスライスを使用することも出来ます。削除方法の詳細は下記を参照ください。

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