Pythonのリストのスライスと、スライスを使って分割する方法について簡潔に解説します。
1. リストのスライスとは
リストのスライスとは、「リストから一部の要素を取り出す操作」のことです。次のように書きます。
リスト[開始位置:終了位置:スライス]
リストの後ろに括弧[]を書き、その中で取り出す範囲を指定します。開始位置や終了位置はインデックス番号を書きます。以下の数値のリストを例に見てみましょう。
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
このリストは以下のようにインデックス番号が割り振られます。
インデックス番号は前から数える場合は0から始まり、後ろから数える場合は-1から始まる点を覚えておきましょう。
それではこのリストに対してスライスを行っていきましょう。
2. 対応するインデックス番号の要素をスライス
[]の中にインデックス番号を書くと、そのインデックス番号に該当する要素が取り出されます。print(nums[0]) # インデックス番号0番を取り出す。
print(nums[2]) # インデックス番号2番を取り出す。
print(nums[-1]) # インデックス番号-1番を取り出す。
print(nums[-3]) # インデックス番号-3番を取り出す。
3. 開始位置から最後までの要素をスライス
[]の中に[2:]というように、インデックス番号とコロンを書くと、開始位置だけを指定したことになり、そこから最後までの要素を取り出します。print(nums[0:]) # インデックス番号0番から全て
print(nums[2:]) # インデックス番号2番から全て
print(nums[-1:]) # インデックス番号-1番から全て
print(nums[-3:]) # インデックス番号-3番から全て
4. 最初から終了位置までの要素をスライス
[]の中に[:5]というように、コロンの後ろにインデックス番号を書くと、終了位置だけを指定したことになり、最初からそこまでの要素を取り出します。なお終了位置の場合は、「n-1番」まで取り出される点にご注目ください。print(nums[:5]) # インデックス番号4番までを取り出す。
print(nums[:-7]) # インデックス番号-8番までを取り出す
5. 範囲を指定してスライス
[]の中に[2:5]というように書くと、指定した開始位置から終了位置-1の範囲で要素をスライスします。print(nums[2:5]) #インデックス番号2番から4番をスライス
print(nums[-6 : 8]) #インデックス番号-6番から7番をスライス
print(nums[-5: -2]) #インデックス番号-5番から-2番をスライス
6. ステップで指定の数値置きにスライス
[]の中に[::2]というように、2つのコロンの後にステップを指定すると、指定したステップ置きに要素が取り出されます。print(nums[::2]) # 2つ置きにスライス
print(nums[::3]) # 3つ置きにスライス
開始位置や終了位置も指定することができます。
print(nums[2::3]) # インデックス番号2番から3置きにスライス
print(nums[:-1:2]) # インデックス番号-2番まで2置きにスライス
print(nums[1:8:2]) # インデックス番号1番から7番を2置きにスライス
7. 逆順にスライス
スライスで負の数字を指定すると、要素を逆順で、指定した数値置きに取り出します。
print(nums[::-1]) # 逆順にスライス
print(nums[::-2]) # 逆順2つ置きにスライス
範囲を指定する時は、開始位置を後ろ、終了位置を前にする必要があります。この場合、終了位置+1までで要素が取り出されます。
print(nums[8:2:-1]) # インデックス番号8番から3番を逆順でスライス
print(nums[-2:-9:-2]) # インデックス番号-2番から-8番を逆順で2置きにスライス
8. リストをスライスして分割
スライスでは、開始位置と終了位置を指定することによって、リストから要素を取り出すことができますが、これを利用してリストを分割することができます。
まずは新しいリストを作ります。
# まずは新しいリストを作ります。
data = [10, 17, 19, 23, 31, 37, 41, 43, 47, 53, 57, 59, 61]
このリストを、スライスを使って、”data1″と”data2″に分割します。
# 今回は分割する位置を変数で指定します。
n = 5
# 上記リストの要素を分割して2つのリストを作ります。
data1 = data[:n] #最初からn-1までのリスト
data2 = data[n:] #nから最後までのリスト
# 確認しましょう。
print(data1)
print(data2)
このように、スライスを使いこなすと、リストの分割を素早く行うことができるようになります。
9. まとめ
リストのスライスはよく使うものなので、しっかり使えるようになっておきましょう。特に終了位置は、正順の場合は-1、逆順の場合は+1が実際の範囲となるので、この点、混乱のないようにマスターしておきましょう。
コメント