0

我有以下代码:

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

如何让 lambda 函数将列表扩展为 3 个值?

4

7 回答 7

4

展开列表 t0 3 值可以通过以下方式完成:

 g(*[4,6,7])

sum不会以你的方式工作。或者你可以这样写:

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

或者只是让你的 lambda 接受一个列表:

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()不接受三个参数:

>>> 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

您正在定义一个接受三个参数的函数,并为它提供一个参数,一个列表。如果你想

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()无法处理你给它的论点。


既然你的 lambda 函数只是一个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 *l: sum(l)
>>> print g(1,2,3)
6
于 2013-07-18T15:07:17.713 回答
1

如果您的 lambda 期望传入一个固定长度的列表/元组,但希望将该列表/元组中的值扩展为单独的参数变量,则以下将起作用。

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

请注意参数列表周围的括号。

这个“特性”在 Python 2.x 中有效,但在 Python 3 中被删除

于 2015-06-04T17:02:18.937 回答