Python のstr型に用意されているstripメソッドについて、(公式ドキュメントではない)解説ページをいくつか読んで仕様を誤解してしまったので、備忘録を残しておきます。
誤解していたstr.stripの仕様
Pythonのstr.stripメソッドは基本的には、何らかの文字列の前や後ろに存在する空白文字を削除するメソッドですが、引数を指定することもできます。
引数を指定した場合には、指定された文字を文字列の前や後ろから削除するのが仕様ですが、元の文字列からすべてが削除されると、私は誤解してしまいました。
「python str.strip」で検索をすると、
- 文字削除
- 特定の文字列を削除
- 文字列の一部を削除
などの文言がタイトルに含まれているページがヒットします。
これらのタイトルから私は、str.stripメソッドが何らかの文字列から指定した文字をすべて削除するメソッドだと誤解しまったのです。
例えば、以下のコードを実行したときに、
'Helloooo! Python!'.strip('Helo!)
「 Pythn」が返されると思い込んでしまったのです。
文字列「Helloooo! Python!」から、引数に指定された「H」「e」「l」「o」「!」がすべて削除された「 Pythn」が返されると誤解したのです。
実際のstr.stripの仕様
実際には「'Helloooo! Python!'.strip('Helo!)」の戻り値は、「 Pythn」ではなく「 Python」です。
元の文字列「Helloooo! Python!」から、「Helloooo!」と末尾の「!」が削除された「 Python」が返されます。「Python」の中にある「o」は削除されません。
引数に指定された文字がすべて削除されると思い込んでいたためですが、公式ドキュメントを読めばすぐに解決しました。
公式ドキュメントには以下のように書かれています。
str.strip([chars])
(途中省略)
文字列の先頭から chars の文字集合に含まれない文字に達するまで、文字が削除されます。文字列の末尾に対しても同様の操作が行われます。
引数に指定された文字ではない文字にぶつかった時点で削除処理をやめるということです。
「'Helloooo! Python!'.strip('Helo!')」の場合、先頭から引数に指定された「H」「e」「l」「o」「!」を削除しつづけ、「Python!」の食前にある半角スペースまできたら削除をやめます。
後ろからも「H」「e」「l」「o」「!」を削除しますが、「Python」の「n」は「H」「e」「l」「o」「!」に含まれていないため末尾の「!」を削除しただけで処理を終了します。
最終更新日時:2023-10-20 00:20