LoginSignup
1
1

More than 3 years have passed since last update.

【Python】lambda式ってどう使うんだろ??【殴り書き】【続き-1】

Last updated at Posted at 2020-07-28

公開理由

・前日にLambda式のコードをqiitaに投稿してみたのだけど、PEP8違反のものでlambda式の動作を
 確認しているようでは自己成長にもつながらないと思ったから。
 よくネットで転がっているmap関数とかfilter関数の使い方を理解しつつ、lambda式のありがたさを感じてみました。

前回qiitaに挙げたやつ

【Python】lambda式ってどう使うんだろ??【殴り書き】【初投稿】
https://qiita.com/sho_cullni/items/aba9a09b30abb20cfd1a

map関数

●文法

リストに対して関数の処理を実行して返り値を吐き出す処理をする関数

map(関数,リスト等)

●サンプルコード

与えられたリストに対して3倍するコードを作ってみた

map_test.py
num_list = [-4, -3, -2, -1, 0, 1, 2, 3, 4]

triple_num_list = map(lambda x: x * 3, num_list)
print(list(triple_num_list))

もしdefを使って上記コードを再現する場合は例えば以下のようになる

def triple(x):
    x = x * 3
    return x

num_list = [-4, -3, -2, -1, 0, 1, 2, 3, 4]
print(list(map(triple,num_list)))

上記2つのコードを実行した際の出力結果は以下になる

[-12, -9, -6, -3, 0, 3, 6, 9, 12]

filter関数

●文法

リスト等に対して、関数を実行して条件に当てはまるもの(Trueになる)ものだけ返り値として吐き出す処理をする関数

filter(関数,リスト等)

●サンプルコード

与えられたリストに対して3の倍数だけ取り出すコードを作ってみた
(世界のナベアツ感)

filter_test.py
num_list = [1, 2, 3, 4, 5, 6]
aho = filter(lambda x: x % 3 == 0, num_list)
print(list(aho))

もしdefを使って上記コードを再現する場合は例えば以下のようになる

def ahoaho(x):
    for i in x:
        if i % 3 == 0:
            aho.append(i)

aho = []
num_list = [1, 2, 3, 4, 5, 6]

ahoaho(num_list)
print(list(aho))

上記2つのコードを実行した際の出力結果は以下になる

[3, 6]

感想

・確かに、defで関数をいちいち定義するより簡単にコードする事が出来そう。。。!
・filter関数とlambda式の合わせ技は、Webスクレイピングで使えそう。今後良い感じに理解出来たらqiitaに挙げてみます。

sorted関数、max関数、min関数(2020/7/29追記)

コメント頂きましたので、追記させて頂きます!
毎度コメントありがとうございます!(^^)/
defで書くとどうなるか、については今後更新していければと・・・!

また、正確にはlambda関数ではなく、lambda式となっております。失礼致しました。
修正させて頂きました!

●文法

・それぞれ以下の文法で以下のことを行えます
sorted関数・・・関数の結果に合わせて昇順や降順にソートする。
max関数  ・・・関数の結果に対して最も大きいデータを取り出す。
min関数  ・・・関数の結果に対して最も小さいデータを取り出す。

sorted(リスト等,関数) ・・・maxやminも同様なので一緒に覚えてしまうと良いかもです!

●サンプルコード

・題材としてはあまり良くないのかもしれないですが、イメージしやすそうなコロナウイルス感染者数で
 ソートしてみたり、一番感染者の多い県を出してみたり、その逆をやってみたりします。

sample.py
corona_infected = [["Tokyo", 11611],["Saitama", 2142],["Chiba",1512],["kanagawa", 2283]]

#sorted関数、max関数、min関数のコード例
corona = sorted(corona_infected, key=lambda x: x[1])
corona_max = max(corona_infected,key=lambda x: x[1])
corona_min = min(corona_infected,key=lambda x: x[1])

#コンソールに出力させる
print(corona_infected)
print(corona)
print(corona_max)
print(corona_min)

上記2つのコードを実行した際の出力結果は以下になる

[['Tokyo', 11611], ['Saitama', 2142], ['Chiba', 1512], ['kanagawa', 2283]]
[['Chiba', 1512], ['Saitama', 2142], ['kanagawa', 2283], ['Tokyo', 11611]]
['Tokyo', 11611]
['Chiba', 1512]
1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1