[Python] 文字列中のスペースを削除する方法

文字列を扱うコードを書いていると、文字列中のスペースを削除したい場面に幾度となく出くわす。そのような場合には、strip() や replace() 、 split() を使用する。

strip() を使用する場合

strip() は文字列の先頭と末尾のスペースを削除してくれる関数。

>>> str = ' Hello world '
>>> str.strip()
'Hello world'

文字列の先頭(left)のスペースのみを削除したい場合には lstrip() 、末尾(right)のみを削除したい場合には rstrip() を使用する。

>>> str.lstrip()
'Hello world '
>>> str.rstrip()
' Hello world'

なお、スペースが複数続く場合は全て削除される。

>>> str = '   Hello world   '
>>> str.strip()
'Hello world'


replace() を使用する場合

先頭や末尾のみだけではなく、文字列中のスペースも削除したい場合には replace() を使うと良い。

>>> str = ' Hello world '
>>> str.replace(' ', '')
'Helloworld'

上記の例では、シングルスペースをスペース無しに置換(replace)している。
この使い方の場合、 strip() と同様にスペースが複数続く場合には全て削除される。

応用編として、ダブルスペースをシングルスペースに変更するような使い方もできる。

>>> s = ' Hello world '
>>> s.replace(' ', ' ')
' Hello world '

>>> s = ' Hello world '
>>> s.replace(' ', ' ')
' Hello world '

1つ目の例では、前後のダブルスペースがシングルスペースに置き換わっている。
2つ目の例では、真ん中のダブルスペースがシングルスペースに置き換わっている。


stlip() を使用する場合

[Python] re.compile内で変数を使用する

Pythonで正規表現パターンをコンパイルして正規表現オブジェクトを作る際に、正規表現パターンを変数にしたい場合がある。

例えば ‘Cat’ が含まれる正規表現オブジェクトを作りたい場合、re.compile() を使用して以下のように書く。

>>> prog = re.compile('Cat')

‘Cat’ を ‘Dog’ に変更したくなった場合には、’Cat’ の部分を ‘Dog’ に変更すればよい。

>>> prog = re.compile('Dog')

その後も’Elephant’ や ‘Monkey’ などに変更したくなるかもしれないため、できれば以下のように動物名を変数化しておきたい。

>>> animal_name = 'Dog'


パターン全体を変数にしたい場合

上記のようにパターン全体を変数とする場合には、単純に

>>> prog = re.compile(animal_name)

と引数にそのまま変数を指定すればよい。


パターンの一部に変数を使用したい場合

では、パターンの一部に変数を使用したい場合はどうすればよいか?

例えば、先頭が ‘Cat’ から始まるオブジェクトを作りたい場合、Catの前に ^(キャラット)を置いて以下のようになる。

>>> prog = re.compile('^Cat')

このCatを変数に置き換えたい場合、どのよう記述すればよいのだろうか?

そんなときには変数部分を ( ) で囲み、format() メソッドを使用すれば良い。記述方法は以下になる。

>>> animal_name = 'Cat'
>>> prog = re.compile('^({})'.format(animal_name))

語尾が ‘Cat’ で終わるオブジェクトを作る場合には、最後に $(ドルマーク)を置いて

>>> prog = re.compile('({})$'.format(animal_name))
>>> prog
re.compile('(Cat (Mew))$')

とすればよい。


変数に特殊文字が含まれる場合

また、その変数にカッコ( ( ) )やパイプ記号( | )、またはバックスラッシュ( \ )などの特殊文字が含まれている場合には注意が必要。

re.escape() を使用して特殊文字をエスケープ(無効化)したうえでcompileするとよい。

>>> animal_name = 'Cat (Mew)'
>>> escaped_animal_name = re.escape(animal_name)
>>> escaped_animal_name
'Cat\\ \\(Mew\\)'
>>> prog = re.compile('^({})'.format(escaped_animal_name))
>>> prog
re.compile('^(Cat\\ \\(Mew\\))')


まとめ


参考

How to add a variable into my re.compile expression

[Python] Pythonのlistの内容を要素ごとに改行して表示する方法

デバッグでlistの中身を見たいときに、print() でlistの要素ごとに改行して中身を表示させたい場合があるかもしれない。

そんなときには以下の2つの方法が使える。

  1. join() を使う方法
  2. list をアンパック(unpack)する方法

例えば以下のような配列があったとする。

>>> l = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']
>>> l
['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat']


join() を使用する方法

join() を使用する方法では、以下のように記述するとSunからSatまでがそれぞれ改行されて表示される。

>>> print('n'.join(l))
Sun
Mon
Tue
Wed
Thu
Fri
Sat


list をアンパックする方法

listをアンパックする方法では、以下のように記述すると join() を使用したときと同様のアウトプットが得られる。

>>> print(*l, sep='\n')
Sun
Mon
Tue
Wed
Thu
Fri
Sat

ちなみにアンパックはPython3でしか使えない。


参考

Python print array with new line

[Python] 比較演算子 == と is の違い

Pythonの比較演算子である ‘==’ と ‘is’ の違いについて。

if x is 100:
    print(x)

のように is を何気なく使っていたら、VS Codeが「ここは == を使うべきじゃありませんか?」と警告を出してくれたので ==is の違いについて調べてみた(VS Code賢い)。

stack overflowによると、

  • == は変数の値が同じかどうかを比較するために使われる
  • is は変数が同じメモリを参照しているかどうかを確認するために使われる

ということらしい。

なので、単純に2つの値が同じ(True)かどうかを確認したい場合には == を使う必要がある。

上記の if 文であれば、

if x == 100:
    print(x)

が正しい。

ここで is を使ってしまうと、場合によって True が返ってきたり False が返ってきたりしてしまう

2つの値を比較する場合で is を使用するほとんど唯一の場面は、None あるいは True、False と比較する時といっても良いかもしれない。

[Python] Google ColaboratoryでPythonを実行する

Google Colaboratoryは、Chromeなどのウェブブラウザ上でPythonが実行できるサービス。

Colabは以下のような人にオススメ。

  • 自分のPC上でPythonを実行する方法がわからない
  • Pythonの実行環境を構築するのが面倒
  • 自分のPC環境を汚したくない

機械学習での用途のみならず、その他の目的で利用するのももちろん可能。

特に、これからPythonを勉強しようと思っていて、とりあえずPythonを動かしてみたい人にはオススメ。

詳細は以下のサイトで。