2016-12-17 1 views
0

があります。私はその後、python3でこのリスト[(a、b)、(c、d)、...]をアンパックする方法lambdaを使用する方法

list1 = [1,2,3] 
list2 = [0.1,0.2,0.3] 

:私は今、私はこのような二つのリストを持って、例えば [(a、b)は、(C、D)、...]このようなリストを解凍するためにラムダ関数を使用したいですこのような新しいリストを生成するためのzip機能を使用することができます。ここでは

l = zip(list1,list2) 

l = [(1,0.1),(2,0.2),(3,0.3)] をそして私はこのように、このリストL上の操作をしたい:

outcome_l = [1*0.1, 2*0.2, 3*0.3] 

は私が知っているように、EA

f = lambda l1,l2:l1*l2 

そして、私は結果を得るために、このように、このラムダ関数を使用したい場合があります:

outcome_l = list(map(f,l)) 

しかし、ここで問題があることであるsiestの方法は、このようになりますラムダ関数を定義することですラムダ関数はリストlのすべてのセットを解凍するのが難しいようです。そして、 "<ラムダ>()は2つの位置引数を取るが、3つは与えられた"というエラーが存在すると言っています。つまり、リストlの長さは3です。

あなたはこの問題に対処する方法を知っていますかpython3で? python2は同じ問題を抱えていないようです。

答えて

1

あなたの関数f(名前をつけて以来、あなたは従来の方法で定義したはずです)は2つの引数をとります。 lの各項目は、単一のオブジェクト、つまりタプルです。これを解決する最も簡単な方法は、非常に汎用性の高い解説で、Pythonのデザイナーがその言語からmapを削除するよう促していました。

outcome_l = [a*b for a,b in l] 

あなたも*開梱して、このように機能fを使用することができます。

outcome_l = [f(*item) for item in l] 
+0

中間 '' 'L 'を作るためのOPのためおそらく不要''を使用し、 '' zip(...) ''を使用します。 – wwii

-1

あなたが希望する結果を得るためにあなたのmapoperator.mulを使用することができます。この関数は、あなたが望むものと同じことを行います。 あなたがf = lambda x: x[0] * x[1]

+0

'operator.mul'はOPの' f'とまったく同じことをしているので、動作させる 'map'の使い方が異なると言いたいかもしれません。 – TigerhawkT3

+0

なぜこの回答が投票されたのですか?このような答えをdownvoteに私は非常に奇妙な私に見えます! – ettanany

-1
l = [(1,0.1),(2,0.2),(3,0.3)] 
outcome_l = [i*j for i, j in l] 

以上を使用することができ、あなたの機能を動作させるためにdocsmap(mul, list1, list2)

から取られない:

list1 = [1,2,3] 
list2 = [0.1,0.2,0.3] 
outcome_l = [i*j for i, j in zip(list1, list2)] 
関連する問題