Xtra etc

日記系雑記ブログ: 農業、データサイエンス、自然

【スポンサーリンク】

Python における内包表記とラムダ式

内方表記とラムダ式について説明します。

内包表記

内包表記では、list 型や dict 型などのデータを用意する際に、ループ処理を行うようなコードを、より簡潔にわかりやすく記述できます。構文は次の通りです。

処理内容 for 変数名 in データ集合

このように書けば、データ集合の要素ひとつひとつを変数に入れて行った処理内容の結果が list 型の保持するデータということになります。

#入力例
<200b>
smpl_list_1 = [i * 2 for i in  range(10)]
print(smpl_list_1)

#出力例
[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

これと同じ内容を for 文で書くと次のようになります。

#入力例
<200b>
smpl_list_2 = []
<200b>
for i in range(10):
    smpl_list_2.append(i * 2)
print(smpl_list_2)

[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]

内包表記は、if 文か if-else 文かで書き方が変わってます。

if文の場合

処理内容 for 変数名 in データ集合 if 条件式

if-else 文の場合

True の場合の処理内容 if 条件式 else False の場合の処理内容 for 変数名 in データ集合

set 型、dict 型の内包表記

set 型や dict 型にも、list 型と同様の内包表記があります。

set 型の場合

{処理内容 for 変数名 in データ集合}

dict 型の場合

{値が key:value になるような処理内容 for 変数名 in データ集合}

set 型、dict 型の場合も、 if 文を組み合わせたい場合は、list 型と同様にします。

ラムダ式

ラムダ式とは、関数の定義をするときに関数に名前をつけずに宣言することができる記法のことです。関数の引数に関数を指定したいときなどには、ラムダ式を使用すれば簡単に書くことができます。また、中の処理の内容も分かりやすくなります。構文は次の通りです。

lambda 引数:処理内容

#ラムダ式を使用・入力例
smpl_list = ["Good Morning", "Hello", "Good Evening"]
<200b>
new_list_1 = list(map(lambda s:s + " World!", smpl_list))
print(new_list_1)

#出力例
['Good Morning World!', 'Hello World!', 'Good Evening World!']

#def を用いた場合・入力例1
<200b>def smpl_function_1(s):
    return s + " World!"
#def を用いた場合・入力例2
<200b>
smpl_list = ["Good Morning", "Hello", "Good Evening"]
new_list_2 = list(map(smpl_function_1, smpl_list))
print(new_list_2)

#出力例
['Good Morning World!', 'Hello World!', 'Good Evening World!']

ラムダ式は、あくまでその場で関数を定義して使用するだけです。ですので、後から似た内容を繰り返し行うのであれば、def を使って名前をつけて関数にしてしまった方が利便性は高いと言えます。なお Python では、ラムダ式の内容には、文は使用できずに式のみが使用できます。

【スポンサーリンク】