───解放しろ、全てを。

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 をもつ全ての要素を選択します。

3. データモデル — Python 3.8.1 ドキュメント

範囲は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

startstopはループしています。

開始位置-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の間でstart1+n*step2 番目」の全ての要素を取得しています。

要は 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]

参考