🐍 Python

スライス s[start:end:step]

文字列の一部分を取り出す構文です。メソッドではなく[ ]を使った添字記法で、Pythonの文字列・リスト・タプルに共通して使えます。AIが生成したコードで最も理解が曖昧なまま読み流されがちな構文の一つです。

構文: s[start:end:step]
意味: startからend-1まで(endは含まない)、step間隔で取り出す
省略時: start省略で先頭から、end省略で末尾まで、step省略で1

基本の範囲指定

もっとも重要な注意点は「endで指定した位置の文字は含まれない」ことです。s[0:5]は0番目から4番目までの5文字を取り出します。

s = "Hello, Python!"
print(s[0:5])  # 'Hello'
print(s[7:])   # 'Python!' (endを省略すると末尾まで)

負のインデックスで末尾から数える

マイナスの数字は末尾からの位置を表します。-1が最後の1文字です。

print(s[-1])   # '!'
print(s[-6:])  # 'ython!'

stepで間隔を指定する・逆順にする

3つ目の値stepを指定すると、その間隔で文字を拾います。stepに-1を指定すると文字列を丸ごと逆順にできます。

s2 = "0123456789"
print(s2[::2])   # '02468'(2文字おき)
print(s2[::-1])  # '9876543210'(逆順)

範囲外を指定してもエラーにならない

リストの添字アクセス(s[100])は範囲外だとIndexErrorになりますが、スライスは範囲外を指定してもエラーにならず、存在する範囲だけを安全に返します。

s3 = "abc"
print(s3[0:100])   # 'abc'(存在する分だけ返る)
print(s3[100:200]) # ''(空文字列。エラーにはならない)
スライスの書き方まとめ
s[:n]
先頭からn文字目の手前まで
s[n:]
n文字目から末尾まで
s[-n:]
末尾からn文字
s[::-1]
文字列全体を逆順にする
💡 添字アクセスとスライスはエラーの出方が違う

s[100]のように単一の添字で範囲外を指定するとIndexErrorで例外が発生しますが、s[100:200]のようにスライスで範囲外を指定してもエラーにならず空文字列が返るだけです。AIが生成したコードで「エラーハンドリングをしているのに範囲外エラーが発生した」場合、添字アクセスとスライスのどちらを使っているかをまず確認しましょう。

← Python str クイックリファレンス一覧へ戻る