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'が削除されていることがわかります。