【例 2.8.16】
イテラブルの要素を1文字で表し,仮引数にする
IDLE → New File → Save as .. → Run
L1 = [2, -1, 3]
m1 = map(lambda t: t*t, L1)
L2 = list(m1)
print(L2)
→
[4, 1, 9]
リストL1の1つの要素,例えば2を仮引数tで表すとき,t*tはその2乗を表すので,lambda式により各要素の2乗から成るmapオブジェクトができる.
リスト型に変換すれば,表示できる.
【例 2.8.17】
複数のイテラブルの要素を使った演算
IDLE → New File → Save as .. → Run
L1 = [1, -2, 3]
L2 = [0, 3, -1, 4]
m1 = map(lambda s,t: s*s*t, L1, L2)
L3 = list(m1)
print(L3)
→
[0, 12, -9]
リストL1の1つの要素をs,L2の1つの要素をtとしたとき,lambda式によりsの2乗×tから成るmapオブジェクトができる.
ただし,L1の要素数は3で,L2の要素数は4だから,少ない方に合わせて,3個まで計算が行われる.
【例 2.8.18】
lambda式の戻り値を2つにする
IDLE → New File → Save as .. → Run
TL1 = [\
[[1,2], [2,0]],\
[[3,1], [1,4]],\
[[-1,0], [2,-1]]\
]
m1 = map(lambda t:( sum(t[0]),sum(t[1]) ), TL1)
T2 = list(m1)
print(T2)
→
[(3, 2), (4, 5), (-1, 1)]
• リストのリストTL1をイテラブルとすると,その1つの要素tとは,上記の\で囲まれた二重ブラケット[[ ]]の部分,例えば[[1,2], [2,0]]になる.
• ここで,一番内側のリスト,例えば[1,2]はt[0],[2,0]はt[1]だから,[1,2]や[2,0]の各々の和を求めたいとすると,sum(t[0])とsum(t[1])になる.
• lambda式の戻り値を2つにするには,:の後を括弧でくくって,値を2つ並べるとよいから,( sum(t[0]),sum(t[1]) )とする.
【例 2.8.19】
lambda式にif文を使う
• 辞書型のデータd1があるとき,d1.keys()によりキー一覧のリストができ,d1.values()により値一覧のリスト,d1.items()により(キー,値)のタプル一覧のリストができる.
• if文を1行で書くには,条件成立の場合の値 if 条件 else 条件不成立の場合の値 とする.
IDLE → New File → Save as .. → Run
d1 = {3:'osaka', 2:'kobe',4:'kyoto'}
m1 = map(lambda t: t[1] if t[0] > 2 else '',
d1.items())
L1 = list(m1)
print(L1)
→
['osaka', '', 'kyoto']
• キーが2よりも大きい都市名をリストにするという設定で考える.
• d1が辞書型だから,d1.items()でキー,値のタプル一覧のリストができる.その1つの要素をtで表すと,t[0]はキー,t[1]は値になる.そこで,キーが2よりも大きいという条件は、t[0]>2となる.