こんにちは。sinyです。
今回は、pythonのfilter()関数とlambdaを使って文字列から複数条件に合致するものを除外する方法について解説します。
以下のように、ある日本語文章(文字列)から絵文字部分「☔、💡」だけを除外した文章を抽出する例で説明します。
この記事の目標
before: おはようございます!☔, 今日もpythonの学習がんばっていきます!💡
after: おはようございます!, 今日もpythonの学習がんばっていきます!
after: おはようございます!, 今日もpythonの学習がんばっていきます!
今回は、pythonのfilter関数とlamdaを使ってサクッと除外してみます。
filter関数は以下のように2つの引数を与えます。
filter(func, iterable)
第2引数(iterable)に対してfunction(第一引数)の返り値がFalseとなる要素を除外し、Trueとなる要素だけを抽出してくれます。
例えば、1~9の数字のリストがあり、3で割り切れる要素だけを抽出したい場合は以下のようにします。
a = [1, 2, 3, 4, 5, 6, 7, 8, 9] b = filter(lambda x: x % 3 == 0, a) print(list(b)) [3, 6, 9] ※1
※1 抽出後のbの値を表示したい場合は、list(b)のようにしてlist形式に変換する必要があります。
さて、上記を応用して以下を実現してみます。
before: おはようございます!☔, 今日もpythonの学習がんばっていきます!💡
after: おはようございます!, 今日もpythonの学習がんばっていきます!
after: おはようございます!, 今日もpythonの学習がんばっていきます!
コードは以下の通り。
message = "before: おはようございます!☔, 今日もpythonの学習がんばっていきます!💡" delimiter = ['☔', '💡'] print("before:", message) message = "".join(list(filter((lambda x: not x in delimiter), message))) print("after:", message)
filterの第1引数に、delimiterで定義した文字列に一致しないものを返すlambda関数を定義します。
第2引数は処理対象の文字列(message)を渡します。
これで、delimiterで定義した文字列を除外した文字列が抽出されるので、最後にlist関数でくくったあと、1文字毎に分割されたデータをjoinしてmessage変数に格納しています。
これで、以下のとおり絵文字だけが除外された文章が出来上がります。
before: おはようございます!☔, 今日もpythonの学習がんばっていきます!💡
after: おはようございます!, 今日もpythonの学習がんばっていきます!
after: おはようございます!, 今日もpythonの学習がんばっていきます!
以上、pythonのfilter関数を使って複数条件に一致する文字列を除外する方法でした。