🔰[python3]スライスでシーケンスの一部を取り出す
スライスとは
リスト・文字列・タプルなどのシーケンス(順番のあるもの)の一部を取り出す操作をスライスといいます。スライスの基本
開始位置startと終了位置stopで[start:stop]と表し、これはstart以上stop未満の範囲を表します。stopの位置は含まれないので注意が必要です。
print("abcde"[1:3])#bc
(増分がプラスのときは)位置を省略すると開始位置は先頭に、終了位置は末尾+1になります。
print("abcde"[:3])#abc
print("abcde"[3:])#de
print("abcde"[3:6])#de
#!/usr/bin/env python3
list_1=["a","b","c","d","e"]
#位置2から3までの要素を取得
print(list_1[2:4])
#['c', 'd']
#0は先頭の要素
print(list_1[0:3])
#['a', 'b', 'c']
#開始位置を省略すると先頭の要素
print(list_1[:3])
#['a', 'b', 'c']
#最後の要素はリストの要素数で取得できる
print(list_1[2:5])
#['c', 'd', 'e']
#終了位置を省略するとリストの要素数になる
print(list_1[2:])
#['c', 'd', 'e']
#リストの要素数を超えてもリストの要素数と同じ
print(list_1[2:6])
#['c', 'd', 'e']
#開始位置と終了位置を省略すると全ての要素を取得
print(list_1[:])
#['a', 'b', 'c', 'd', 'e']
#2以上2未満の位置なので何もなし
print(list_1[2:2])
#[]
#2以上1未満の位置なので何もなし
print(list_1[2:1])
#[]
マイナスの位置
位置-1は末尾の要素を表し、-2は末尾から2番目となり、先頭要素はマイナスの要素数となります。print("abcde"[-4:-2])#bc
print("abcde"[2:-6:-1])#cba
位置-1が末尾の要素なので、最後の要素も追加しようとして+1して0にすると先頭の要素になるので注意が必要です。
print("abcde"[2:0])#
例えば要素数5のとき、-1の位置は4と同じ、-3の位置は2の位置と同じ、-5の位置は先頭の位置、-6の位置は-1となり先頭-1と考えます。
print("abcde"[-4:-2])#bc
#!/usr/bin/env python3
list_1=["a","b","c","d","e"]
#2以上4(=-1+5)未満の位置
print(list_1[2:-1])
#['c', 'd']
#-1の位置からもう一文字追加しようとすると先頭に戻る
print(list_1[2:0])
#[]
#0以上2未満の位置
print(list_1[-5:-3])
#['a', 'b']
#要素数以上のマイナスは先頭になる
print(list_1[-6:-3])
#['a', 'b']
#0以上2未満の位置
print(list_1[-7:-3])
#['a', 'b']
#4以上3未満の位置
print(list_1[-1:3])
#[]
スライスの増分
スライスを使って[start:stop]で要素を取り出すとき指定した個数毎に取り出したいときは、その増分stepを使って、[start:stop:step]とします。増分が省略されている場合は1となります。
print("abcde"[1:4:2])#bd
#!/usr/bin/env python3
list_1=["a","b","c","d","e"]
#増分を省略すると1となる。
print(list_1[2:4:])
#['c', 'd']
#0,2番目の要素が取り出されます
print(list_1[0:4:2])
#['a', 'c']
#0,2番目の要素が取り出されます
print(list_1[0:3:2])
#['a', 'c']
#1,3番目の要素が取り出されます
print(list_1[1:4:2])
#['a', 'c']
マイナスの増分
増分がマイナスのときは、開始位置から始めて増分を引いていき終了位置を超過している間の要素だけを取得します。print("abcde"[3:1:-1])#dc
print("abcde"[:2:-1])#ed
print("abcde"[2::-1])#cba
print("abcde"[::-1])#edcba
#!/usr/bin/env python3
list_1=["a","b","c","d","e"]
#リバース
print(list_1[::-1])
#['e', 'd', 'c', 'b', 'a']
#4,3,2,1の位置が選択されるので先頭は選ばれない
print(list_1[4:0:-1])
#['e', 'd', 'c', 'b']
#リバースを省略せずに書く
print(list_1[4:-6:-1])
#['e', 'd', 'c', 'b', 'a']
#4,3,2の位置を取り出す
print(list_1[4:1:-1])
#['e', 'd', 'c']
#4,2の位置を取り出す
print(list_1[4:1:-2])
#['e', 'c']
#[3:1:-1]と同じで3,2の位置を取り出す
print(list_1[-2:-4:-1])
#['d', 'c']
#[3:1:-2]と同じで3の位置を取り出す
print(list_1[-2:-4:-2])
#['d']
スライスの位置まとめ
要素数をnとする。このとき、
- 先頭(0番目)の要素は位置0又は-n
- 1番目の要素は位置1又は-n+1
- n-2番目の要素は位置n-2又は-2
- 末尾(n-1番目)の要素は位置n-1又は-1
- 先頭より少ない位置は-n-1以下の整数
- 末尾より多い位置はn以上の整数
ページ情報
タイトル | 🔰[python3]スライスでシーケンスの一部を取り出す |
URL | https://www.nomuramath.com/vpnov76i/ |
SNSボタン |
[python]リスト同士で順序を保持して差集合を求める
while文の基本
[python]集合型同士の和集合・積集合・差集合・対称差集合
print({'a','b'}|{'b','c'}) #{'c', 'a', 'b'}
[python]リスト内包表記
print([i**2 for i in range(5)]) #[0, 1, 4, 9, 16]