Pythonのリストのスライスと分割

Pythonのリストのスライスと、スライスを使って分割する方法について簡潔に解説します。

目次

1. リストのスライスとは

リストのスライスとは、「リストから一部の要素を取り出す操作」のことです。次のように書きます。

In [ ]:
リスト[開始位置:終了位置:スライス]

リストの後ろに括弧[]を書き、その中で取り出す範囲を指定します。開始位置や終了位置はインデックス番号を書きます。以下の数値のリストを例に見てみましょう。

In [1]:
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

このリストは以下のようにインデックス番号が割り振られます。

インデックス番号は前から数える場合は0から始まり、後ろから数える場合は-1から始まる点を覚えておきましょう。

それではこのリストに対してスライスを行っていきましょう。

2. 対応するインデックス番号の要素をスライス

[]の中にインデックス番号を書くと、そのインデックス番号に該当する要素が取り出されます。

In [2]:
print(nums[0])   #  インデックス番号0番を取り出す。
print(nums[2])   #  インデックス番号2番を取り出す。
print(nums[-1])  #  インデックス番号-1番を取り出す。
print(nums[-3])  #  インデックス番号-3番を取り出す。
1
3
10
8

3. 開始位置から最後までの要素をスライス

[]の中に[2:]というように、インデックス番号とコロンを書くと、開始位置だけを指定したことになり、そこから最後までの要素を取り出します。

In [3]:
print(nums[0:])   #  インデックス番号0番から全て
print(nums[2:])   #  インデックス番号2番から全て
print(nums[-1:])  #  インデックス番号-1番から全て
print(nums[-3:])  #  インデックス番号-3番から全て
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[3, 4, 5, 6, 7, 8, 9, 10]
[10]
[8, 9, 10]

4. 最初から終了位置までの要素をスライス

[]の中に[:5]というように、コロンの後ろにインデックス番号を書くと、終了位置だけを指定したことになり、最初からそこまでの要素を取り出します。なお終了位置の場合は、「n-1番」まで取り出される点にご注目ください。

In [4]:
print(nums[:5])  #  インデックス番号4番までを取り出す。
print(nums[:-7]) #  インデックス番号-8番までを取り出す
[1, 2, 3, 4, 5]
[1, 2, 3]

5. 範囲を指定してスライス

[]の中に[2:5]というように書くと、指定した開始位置から終了位置-1の範囲で要素をスライスします。

In [5]:
print(nums[2:5])      #インデックス番号2番から4番をスライス
print(nums[-6 : 8])  #インデックス番号-6番から7番をスライス
print(nums[-5: -2])  #インデックス番号-5番から-2番をスライス
[3, 4, 5]
[5, 6, 7, 8]
[6, 7, 8]

6. ステップで指定の数値置きにスライス

[]の中に[::2]というように、2つのコロンの後にステップを指定すると、指定したステップ置きに要素が取り出されます。

In [6]:
print(nums[::2])  #  2つ置きにスライス
print(nums[::3])  #  3つ置きにスライス
[1, 3, 5, 7, 9]
[1, 4, 7, 10]

開始位置や終了位置も指定することができます。

In [7]:
print(nums[2::3])   # インデックス番号2番から3置きにスライス
print(nums[:-1:2])  # インデックス番号-2番まで2置きにスライス
print(nums[1:8:2]) #  インデックス番号1番から7番を2置きにスライス
[3, 6, 9]
[1, 3, 5, 7, 9]
[2, 4, 6, 8]

7. 逆順にスライス

スライスで負の数字を指定すると、要素を逆順で、指定した数値置きに取り出します。

In [8]:
print(nums[::-1])  #  逆順にスライス
print(nums[::-2])  #  逆順2つ置きにスライス
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
[10, 8, 6, 4, 2]

範囲を指定する時は、開始位置を後ろ、終了位置を前にする必要があります。この場合、終了位置+1までで要素が取り出されます。

In [9]:
print(nums[8:2:-1])     #  インデックス番号8番から3番を逆順でスライス
print(nums[-2:-9:-2])  #  インデックス番号-2番から-8番を逆順で2置きにスライス
[9, 8, 7, 6, 5, 4]
[9, 7, 5, 3]

8. リストをスライスして分割

スライスでは、開始位置と終了位置を指定することによって、リストから要素を取り出すことができますが、これを利用してリストを分割することができます。

まずは新しいリストを作ります。

In [1]:
# まずは新しいリストを作ります。
data = [10, 17, 19, 23, 31, 37, 41, 43, 47, 53, 57, 59, 61]

このリストを、スライスを使って、”data1″と”data2″に分割します。

In [2]:
# 今回は分割する位置を変数で指定します。
n = 5
# 上記リストの要素を分割して2つのリストを作ります。
data1 = data[:n] #最初からn-1までのリスト
data2 = data[n:] #nから最後までのリスト
#  確認しましょう。
print(data1)
print(data2)
[10, 17, 19, 23, 31]
[37, 41, 43, 47, 53, 57, 59, 61]

このように、スライスを使いこなすと、リストの分割を素早く行うことができるようになります。

9. まとめ

リストのスライスはよく使うものなので、しっかり使えるようになっておきましょう。特に終了位置は、正順の場合は-1、逆順の場合は+1が実際の範囲となるので、この点、混乱のないようにマスターしておきましょう。



よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

目次
閉じる