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()の場合は関数を入力します。以下に例を示します。