0

次のコードがあります。

g = lambda a, b, c: sum(a, b, c)
print g([4,6,7])

リストを3つの値に展開するラムダ関数を取得するにはどうすればよいですか?

4

7 に答える 7

4

リスト t0 3 値を展開すると、次のようになります。

 g(*[4,6,7])

しかし、sumあなたのやり方ではうまくいきません。または、次のように書くこともできます。

>>> g = lambda *arg: sum(arg)
>>> print g(4, 5, 6)
15
>>> 

または、ラムダがリストを受け入れるようにするだけです。

g = lambda alist: sum(alist)
print g([4,6,7])
于 2013-07-18T15:05:40.753 に答える
3
g = lambda L: sum(L)
print g([4,6,7])

任意のサイズのリストで機能します。

を使用する場合g = lambda a, b, c: someFunc(a, b, c)は、電話してくださいprint g(4,6,7)

于 2013-07-18T15:03:37.947 に答える
3

lambdaリストを取るように変更できないのはなぜですか。sum()3 つの引数を取らないため:

>>> g = lambda a_list: sum(a_list)
>>> print g([4,6,7])
17

または非キーワード引数:

>>> g = lambda *nkwargs: sum(nkwargs)
>>> print g(4,6,7)
17
于 2013-07-18T15:04:08.450 に答える
1

3 つのパラメーターを受け取る関数を定義し、それに単一のパラメーター (リスト) を指定します。お望みならば

print g([4,6,7])

機能するには、あなたの定義は

g = lambda lst: sum(lst)
于 2013-07-18T15:05:58.253 に答える
1

探しているコードは次のとおりです。

>>> g = lambda a, b, c: sum([a, b, c])
>>> print g(*[4,6,7])
17

あなたがやろうとしていたことはうまくいきません

>>> g = lambda a, b, c: sum(a, b, c)
>>> print g(*[4,6,7])

Traceback (most recent call last):
  File "<pyshell#83>", line 1, in <module>
    print g(*[4,6,7])
  File "<pyshell#82>", line 1, in <lambda>
    g = lambda a, b, c: sum(a, b, c)
TypeError: sum expected at most 2 arguments, got 3

あなたsum()が与えた引数を処理できないからです。


ラムダ関数は単なる関数なので、直接sum()呼び出してみませんか?sum()

あなたのコードが次のa, b, c値の場合:

>>> a, b, c = range(1,4)
>>> print a,b,c
1 2 3

そして、あなたはやりたかった:

>>> g = lambda a, b, c: sum([a, b, c])
>>> print g(*[a,b,c])
6

なぜ次のことをしないのですか?:

>>> sum([a,b,c])
6
于 2013-07-18T15:06:27.257 に答える
1

ラムダに固定長のリスト/タプルが渡されることを期待しているが、そのリスト/タプルの値を個別のパラメーター変数に展開したい場合は、次のように機能します。

g = lambda (a, b, c): a + b + c
g([4, 6, 7])

パラメーター リストを囲む括弧に注意してください。

この「機能」は Python 2.x で動作しますが、Python 3 で削除されました

于 2015-06-04T17:02:18.937 に答える
1
>>> g=lambda *l: sum(l)
>>> print g(1,2,3)
6
于 2013-07-18T15:07:17.713 に答える