Python

【Python】リストからスライス指定で値を取得する

MAX

Pythonのリストは、スライスを指定でリストを取得できる。

インデックス単体指定だと、そのインデックスの値を取得するだけだが、スライス指定することで、リストを取得できる。

また、スライスの特徴として、インデックスの範囲を超えて指定しても、エラーにならないことが挙げられる。

スライス指定する場合、この特徴を活かして、末尾のことを考えずに処理を書くこともある。

スポンサーリンク

インデックス指定で値取得

リストから値を取得する一番基本的な方法。

インデックスを指定して値を取得する。

1list_a = [1, 2, 3, 4, 5, 6]
2
3list_a[2]
4# 3

インデックスが範囲外の場合はIndexError

範囲外のインデックスを指定するとIndexErrorが返ってくる。

1list_a = [1, 2, 3, 4, 5, 6]
2
3list_a[10]
4# IndexError: list index out of range

なお、スライス指定をすることで、IndexErrorが発生しなくなる。

スライス指定でリスト取得

基本的なスライス指定

list[i:j]i <= index < jの範囲のリストを取得できる。

i, j共に省略可能。

iとjの両方を省略した場合(list[:])はlist.copy()と同じになる。

1list_a = [1, 2, 3, 4, 5, 6]
2# スライスで値取得
3list_a[2:]
4# [3, 4, 5, 6]
5
6# -1は末尾となるため、-2は末尾から2個目のインデックスを指す。
7list_a[-2:]
8# [5, 6]
9
10list_a[:3]
11# [1, 2, 3]
12
13list_a[:-3]
14# [1, 2, 3]
15
16# 2 <= index < 5の値を取得
17list_a[2: 5]
18# [3, 4, 5]
19
20# listのコピーを取得
21list_a[:]
22# [1, 2, 3, 4, 5, 6]

インデックス範囲外のスライス指定

スライス指定の場合、存在しないインデックスを指定しても空リストが返ってくるだけでエラーとならない。

1# indexの範囲を超えてもエラーとならずに、存在するインデックスの分だけ値を取得できる
2list_a[-100:100]
3# [1, 2, 3, 4, 5, 6]
4
5# 対象のインデックスがない場合、空リストが返ってくる
6list_a[-100:-900]
7# []

スライスでステップも指定してリスト取得

スライスでは開始と終了位置の指定だけでなく、ステップ数も指定できる。

list[i: j: k]i<= index < jの範囲でkステップ毎に値を取得できる。

1list_a = [1, 2, 3, 4, 5, 6]
2
3# list[i: j: k]でi <= index < jの範囲でkステップ毎に値を取得
4# 0 <= index < 100の範囲で2ステップ毎に値取得
5list_a[0:100:2]
6# [1, 3, 5]
7
8# i省略
9# list[i: j: k]でiを省略するとiは0となる
10list_a[:4:2]
11# [1, 3]
12
13# j省略
14# list[i: j: k]でjを省略するとlen(list)となる
15list_a[1::2]
16# [2, 4, 6]
17
18# k省略
19# list[i: j: k]でkを省略するとkは1となる
20list_a[1:6:]
21# [2, 3, 4, 5, 6]
22
23list_a[::2]
24# [1, 3, 5]
25
26list_a[::100]
27# [1]

共通のシーケンス演算

まとめ

インデックス指定とスライス指定では、範囲外のインデックス指定時に動作が大きく異なる。

インデックス単体指定では範囲外のインデックス指定時にIndex Errorが返ってくる。

スライス指定で範囲外のインデックス指定時には、IndexErrorは発生せず、対象インデックスが存在しない場合は空リストが返ってくる。

1list_a = [1, 2, 3, 4, 5, 6]
2
3# スライスで値取得
4# 2 <= index < 4(つまりindex=2, 3)の値取得
5list_a[2:4]
6# [3, 4]
7
8# indexの範囲を超えてもエラーとならずに、存在するインデックスの分だけ値を取得できる
9list_a[-100:100]
10# [1, 2, 3, 4, 5, 6]
11
12# 対象のインデックスがない場合、空リストが返ってくる
13list_a[-100:-900]
14# []
15
16# list[i: j: k]でi <= index < jの範囲でkステップ毎に値を取得
17# 0 <= index < 100の範囲で2ステップ毎に値取得
18list_a[0:100:2]
19# [1, 3, 5]
20
21# i省略
22# list[i: j: k]でiを省略するとiは0となる
23list_a[:4:2]
24# [1, 3]
25
26# j省略
27# list[i: j: k]でjを省略するとlen(list)となる
28list_a[1::2]
29# [2, 4, 6]
30
31# k省略
32# list[i: j: k]でkを省略するとkは1となる
33list_a[1:6:]
34# [2, 3, 4, 5, 6]

値をリストで取得しても問題がなく、リストの長さが不明瞭な場合などは、スライスをうまく使うことで、エラー処理を減らせるかもしれない。

スポンサーリンク
ABOUT ME
MAX
MAX
ITエンジニア、データサイエンティスト
新卒でSIerに入社し、フリーランスになってWEB系へ転向。
その後AIの世界へ足を踏み入れ、正社員に戻る。 テーブルデータの分析がメイン。
スポンサーリンク
記事URLをコピーしました