【アイデミー学習記】 データクレンジング (1) lambda式

NO IMAGE

lambda式の利用に必要な知識

split()関数で、文字列を分割

split()関数を用いれば、文字列を分割し、リスト型で返されます。

分割したい文字列.split("区切る記号", 分割回数)

例えば、以下のような格好で動作するわけです。
また、分割回数を2と入力すると、最初の2要素は分割されるがそれ以上の要素は分割しないという意味です。

re.split()で一度に複数の記号で分割

split()の場合、一つの記号でしか分割ができません。そのため、reモジュールを呼び出して、re.split()関数を利用します。

re.split("[区切る記号]", 分割したい文字列)

以下のような形で運用します。

他の関数を引数とする高階関数 map()

map()関数を用い、他の関数を引数として計算する手法を高階関数と言います。

とりぞー
とりぞー

よくわかんねーって、感じですよね。

説明を続けると徐々にわかってきます。分からなくても次々読んでいきましょう。

関数の構造は以下です。

map(適用したい関数, 配列)

【適用したい関数】に関数を、【配列】には配列データおきます。

とりぞー
とりぞー

なにがオイシイか、ということですが、for文で書くよりもmap()関数で書くことで非常に簡略化ができる点です。

for文で記述する場合と、map()関数で記述する場合を比較しましょう。

以下を見るとfor文よりもmap()関数を使うほうが、よりスッキリします。

とりぞー
とりぞー

map()関数の変数となる【適用したい関数】には、lambda式あるいは def で事前に仮数定義を行います。

filter()を用いて、条件を満たす要素をlistから取り出す

filter()を用いれば、list内の要素のうち、条件を満たす要素だけを取り出すことが可能です。

filter()関数の構造は以下となります。

filter(条件となる関数, 配列)

条件となる関数は、True/Falseを返すブール形式です。lambda式であれば、下記のようなものです。

for文の場合とfilter()関数を利用した場合の比較は以下となります。

とりぞー
とりぞー

for文の条件分岐よりも、filter()関数を利用した場合のほうがスッキリしますね。

sorted()を用いてソートする

とりぞー
とりぞー

そういえば、sort()関数もあったなぁ。sorted()関数との違いはなんだろう…

sort()とsorted()の違いを比較

sort()とsorted()の違いは以下です。

  • sort()は、リストをソートする
  • sorted()は、文字列やタプル(複数の要素を一組としたものが複数並ぶもの)をソートする

コードを見ると違いがわかりやすいはず。以下に作ってみました。

sorted()関数の構造は以下となります。

sorted(ソートしたい配列, key=キーとなる関数, reverse=True または False)

sorted()関数の場合、key は数値を入れますが、sorted()の場合は関数を入力します。以下に例を示します。