リスト内包表記はよく見かけるので、仕組みを理解しよう(ついでにmapやlambdaも)
目次
今回使用するテストデータは以下とします
TestList = [1,2,3,4,5]
01.リスト内包表記
リスト内の要素に対して演算(2倍)をします
processed_list = [num*2 for num in TestList]
この結果は以下になります
[2,4,6,8,10]
あえて、言葉で書くならこんな感じでしょうか。
02.リスト内包表記(if文)
偶数の値に対して演算(2倍)し、リストに残留させます
processed_list = [num*2 for num in TestList if num%2 == 0]
この結果は以下になります
[4,8]
奇数に関してはリストにすら残りませんでした
言葉で書くならこんな感じです。
奇数もリストに残したい場合は「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]
無事できました。
一見難しそうですが、
冷静になれば大したことは無いです。
諦めず理解しましょう!