strip関数にご用心

皆様こんにちはwasatingです。

今回はpythonのstrip関数を使った結果事故ったので共有していきたいと思います。

ご存じの方も多いかと思いますが、strip関数は以下のような動きをします。

sent = """
技術ブログ記述中…

"""
print(sent)
# 
# 技術ブログ記述中…
#
#
print(sent.strip())
# 技術ブログ記述中…

sent2 = "Now writing..."
print(sent2.strip("N"))
# ow writing...

つまり、

  • 引数なしの場合、元の文字列の前後から空白、改行、タブ等を削除
  • 引数が含まれる場合、元の文字列の前後から与えた引数の文字を削除

となります。

今回の失敗

さて、このような動作を見て以下のようになると思いますよね?

sent2 = "Now writing..."
print(sent2.strip("Now"))
#  writing... <- ※wの前にスペースが残っています

これは正しく動きます(うれしい)

が、

sent3 = "Now writing"
print(sent3.strip("ting"))
# Now wri <- こうなるだろうと思いきや
# Now wr <-実際はこう

という落とし穴があります。(1敗)

実はstrip関数は文字の並びは一切関係なく、引数に含まれる文字がヒットしなくなるまで削除するという動作でした。

じゃあどうする

sent3 = "Now writing"
print(sent3.removesuffix("ting"))
# Now wri

単純にremovesuffix/removeprefixを使えばよい、というオチでした。

皆さんも何となく使っている関数が実際はどういう動きをしているか、たまに思いをはせてあげてみてくださいね