2
Help us understand the problem. What are the problem?

posted at

updated at

Python リスト内包表記とmap,lambda攻略(基礎)

リスト内包表記はよく見かけるので、仕組みを理解しよう(ついでにmapやlambdaも)

目次

  1. リスト内包表記
  2. リスト内包表記_if文
  3. lambdaやmap

今回使用するテストデータは以下とします

TestList = [1,2,3,4,5]

01.リスト内包表記

リスト内の要素に対して演算(2倍)をします

processed_list = [num*2 for num in TestList]

この結果は以下になります

[2,4,6,8,10]

あえて、言葉で書くならこんな感じでしょうか。

スクリーンショット 2022-03-21 21.03.50.png


02.リスト内包表記(if文)

偶数の値に対して演算(2倍)し、リストに残留させます

processed_list = [num*2 for num in TestList if num%2 == 0]

この結果は以下になります

[4,8]

奇数に関してはリストにすら残りませんでした
言葉で書くならこんな感じです。


スクリーンショット 2022-03-21 21.32.47.png


奇数もリストに残したい場合は「else」を使います(※elifは使えません)

elseも書く場合は、if文(条件式)とforの順番が入れ替わります

processed_list = [num*2 if num%2 == 0 else num for num in TestList]

順番が逆になるものの、考え方は同じです

※else pass は効かないのでそのままnumを残留させています

03.lambdaやmap

lambda(無名関数)

lambdaとは...
一言で言えば def と同じです
ただdefで書くにはおおげさだなーっていう時に使われたりします。

書き方は以下です

lambda 引数: 返り値

●値を2倍する関数

defだと

def double(n):
    n = n*2
    return n

lambdaだと

double = lambda n:n*2

変数にいれてあげるとdefで定義したのと同じ操作ができます
よって、どちらも以下のように関数を使えます

double(1)

outputは

2

1回で分からなくても数回読み返せば理解できるはずです!

リスト内包表記みたく1行で書くには...map関数を使います


map

mapとは...
リスト、タプルなどの複数要素を持つデータ型に対して、それぞれの要素に同じ処理を行なうための関数です
(for文が不要になります!)

書き方は以下です

map(関数, シーケンス)

シーケンスには,リストやタプルの処理させたいデータが該当します
では、早速例で確認していきましょう

●値を2倍する

使用するリストデータは同様に以下のものを使います

TestList = [1,2,3,4,5]
map_output = map(lambda n:n*2, TestList)

アウトプットは

<map at 0x7fb609b08f10>

オブジェクトが出てきました。

リストで欲しいので、リストとして出力しましょう。

list(map_output)

アウトプットは

[2, 4, 6, 8, 10]

無事できました。

一見難しそうですが、
冷静になれば大したことは無いです。

諦めず理解しましょう!

Register as a new user and use Qiita more conveniently

  1. You can follow users and tags
  2. you can stock useful information
  3. You can make editorial suggestions for articles
What you can do with signing up
2
Help us understand the problem. What are the problem?