Python - スライス表記の超絶分かりやすいまとめ【図解】
txt ="ReleaseAll" print(txt[:3]) #先頭から3文字 print(txt[-3:]) #末尾から3文字 print(txt[3:]) #3文字目から末尾 print(txt[:-3]) #先頭から末尾3文字目 # Rel # All # easeAll # Release
:-)
:-3
3
スライス操作まとめ
[ 開始位置start : 終了位置stop ]
スライスは、範囲を選択できる機能です。
シーケンスはスライス操作 (slice) もサポートしています: a[i:j] とすると、 i <= k < j であるインデクス k をもつ全ての要素を選択します。
範囲はstart
<= k < stop
となる点に注意。
start
を省略した場合は先頭から、stop
を省略した場合は末尾までが選択されます。
両方省略した場合は全て取得。
print(txt[:]) # ReleaseAll
スライス操作は別オブジェクトを作成するので、これを利用してリストを作成することもできます。
int_list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] int_list2 = int_list1[:] print(id(int_list1)) print(id(int_list2)) # 139683122088840 # 139683122510408
id()
はオブジェクトの識別値を返す組み込み関数。
2つのリストが別オブジェクトであることがわかります。
先頭から3文字を取得
print(txt[:3]) +---+---+---+---+---+---+---+---+---+---+ | R | e | l | e | a | s | e | A | l | l | +---+---+---+---+---+---+---+---+---+---+ 0 1 2 3 4 5 6 7 8 9 10 ^ ~ ^ # Rel
^ ~ ^
末尾から3文字を取得
print(txt[-3:]) +---+---+---+---+---+---+---+---+---+---+ | R | e | l | e | a | s | e | A | l | l | +---+---+---+---+---+---+---+---+---+---+ 0 1 2 3 4 5 6 7 8 9 0 ^ ~ ^ 0 -3 -2 -1 0 # All
start
とstop
はループしています。
開始位置-3は「0から3戻る」なので末尾から3つ後ろが開始位置。
終了位置は末尾。
従って、txt[-3:]
はAll
となります。
3文字目から末尾までを取得する
print(txt[3:]) +---+---+---+---+---+---+---+---+---+---+ | R | e | l | e | a | s | e | A | l | l | +---+---+---+---+---+---+---+---+---+---+ 0 1 2 3 4 5 6 7 8 9 0 ^ ~ ^ # easeAll
先頭から末尾3文字目までを取得
print(txt[:-3]) +---+---+---+---+---+---+---+---+---+---+ | R | e | l | e | a | s | e | A | l | l | +---+---+---+---+---+---+---+---+---+---+ 0 1 2 3 4 5 6 7 8 9 0 ^ ~ ^ 0 -3 -2 -1 0 # Release
開始位置は先頭。
終了位置-3は「0から3戻る」なので末尾0から3つ後ろが終了位置。
従って、txt[:-3]
はRelease
となります。
第三引数で増分stepを指定
[ 開始位置start : 終了位置stop : 増分step ]
第三引数を指定することで、start
+step
番目を取得することができます。
シーケンスによっては、第三の "ステップ (step)" パラメタを持つ "拡張スライス (extended slice)" もサポートしています: a[i:j:k] は、 x = i + n*k, n >= 0 かつ i <= x < j であるようなインデクス x を持つような a 全ての要素を選択します。
下記は「1 <= x < 5の間でstart
1+n*step
2 番目」の全ての要素を取得しています。
要は 1 <= x < 5 の奇数番目を取得。
int_list1 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] int_list1[1:5:2] +---+---+---+---+---+---+---+---+---+---+ | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | +---+---+---+---+---+---+---+---+---+---+ 0 1 2 3 4 5 6 7 8 9 0 ^ ~ ^ 1+0*2 1+1*2 1+2*2 1+3*2 ... # [1, 3]
参考