【问题标题】:TypeError: <lambda>() missing 1 required positional argument: 'item'类型错误:<lambda>() 缺少 1 个必需的位置参数:'item'
【发布时间】:2019-06-29 05:57:06
【问题描述】:

我似乎无法找出问题所在。我正在使用此代码从数组中创建多组数字。我不确定这是否是 python 兼容性问题。


data=[]
data=1,2,3,4,6,7,8,11,12
for k, g in groupby(enumerate(data), lambda i, x: i-x):
    print map(itemgetter(1), g)

&lt;TypeError: &lt;lambda&gt;() missing 1 required positional argument: 'x'

【问题讨论】:

  • 您的 lambda i, x : i -x 需要两个参数,但 groupby 与一个接受一个参数的函数一起使用。您可能想要执行可迭代解包。

标签: python lambda


【解决方案1】:

假设这是 Python 2.x - 您只是在 lambda 的参数周围缺少一对括号:

for k, g in groupby(enumerate(data), lambda (i, x): i-x):
    print map(itemgetter(1), g)

【讨论】:

  • 进一步澄清:TypeError 被引发是因为一个元组被传递给 lambda,而不是 2 个单独的参数(enumerate[x] 变成 [(i, x)] 并且 (i, x) 被传递到 lambda)。
【解决方案2】:

您在这里用lambda i, x : i - x 定义了一个接受两个参数的函数,但groupby 函数只接受一个参数。在本例中为 2 元组。

因此您可以通过下标获取元素:

for k, g in groupby(enumerate(data), lambda x: x[0]-x[1]):
    print(map(itemgetter(1), g))

或者在,你可以使用可迭代解包

for k, g in groupby(enumerate(data), lambda (i, x): i - x):
    print(map(itemgetter(1), g))

我们因此解包两个参数ix中的元组。

【讨论】:

    猜你喜欢
    • 2018-09-12
    • 1970-01-01
    • 2022-01-11
    • 1970-01-01
    • 2021-08-05
    • 2021-07-06
    • 2021-08-05
    • 2017-07-23
    相关资源
    最近更新 更多