42
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

今まで勘違いしていたPythonの.strip(), .lstrip(), .rstrip()

Last updated at Posted at 2019-03-06

Introduction

今まで.strip(), .lstrip(), rstrip()の挙動を間違って理解していた自分への戒めとして、この記事を掲載します。

端から指定した文字列を除去する便利なメソッドたち

例えば、文字列 a = 'TATATATATATAGCAGGATCATAATCATAGATATATATATA' から右端の'A'を除去したいとします。するとこれを行うPythonの処理と、その実行例は

>>> a = 'TATATATATATAGCAGGATCATAATCATAGATATATATATA'
>>> a.rstrip('A')
'TATATATATATAGCAGGATCATAATCATAGATATATATAT'

のようになり、確かに右端から'A'が一つ無くなっていることがわかります。

複数文字を除去対象に指定した場合

では、今度はa.lstrip('TGA')としてみましょう。この実行結果はどうなるでしょうか。

>>> a.lstrip('TGA')
'CAGGATCATAATCATAGATATATATATA'

私の勘違いポイントは「.lstrip('TGA')とすると、文字列'TGA'が左端から除去される」というものでした。でもこれは間違いです。本来の挙動は、この例では文字'T', 'G', 'A'以外の文字が現れる場所まで、左端から削除し続けるというものです。文字列ではなく各文字が現れなくなる場所、この例では'C'まで処理が行われるということに、今更気づいたのでした。

文字の順序は関係ないため、'AGT'としても同様の結果が得られます。

>>> a.lstrip('AGT')
'CAGGATCATAATCATAGATATATATATA'

特定の順序に沿った文字列のみの削除は.replace()で

章タイトルにある通り、特定の文字列を**その順序のままに削除を行いたい場合は.replace('文字列', '')**とすると、望ましい結果が得られます。

>>> a = 'TATATATATATAGCAGGATCATAATCATAGATATATATATA'
>>> a.replace('TAG', '')
'TATATATATACAGGATCATAATCAATATATATATA'

文字列'TAG'が削除されていることがわかります。

42
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
42
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?