Python使用groupby分组数组时出现lambda参数缺失错误的问题咨询
解决你的Python代码TypeError问题
嘿,我来帮你搞定这个错误!你的代码触发TypeError: <lambda>() missing 1 required positional argument: 'x'的原因很明确,咱们一步步拆解:
直接错误原因:Lambda参数写法不对
enumerate(data)会生成一个个二元组,比如(0,1)、(1,2)、(2,3)这样的结构。而groupby会把每个这样的二元组作为单个参数传给你的lambda函数,但你写的lambda i, x: i-x期望接收两个独立的参数i和x,这就导致Python找不到第二个参数x,直接报错。
修复方案
根据你使用的Python版本,有两种修复方式:
1. 如果你用的是Python2
Python2支持元组参数拆包,直接把lambda的参数写成拆包形式即可:
from itertools import groupby from operator import itemgetter 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))
2. 如果你用的是Python3(推荐,因为Python2已停止维护)
Python3取消了元组参数拆包,需要让lambda接收单个参数,然后通过索引访问元组里的元素:
from itertools import groupby from operator import itemgetter data = [1,2,3,4,6,7,8,11,12] # 用元组也没问题,改成列表只是更直观 for k, g in groupby(enumerate(data), lambda t: t[0] - t[1]): print(list(map(itemgetter(1), g))) # Python3里map返回迭代器,转成list才能打印实际内容
额外补充的小问题
- 你的代码里缺少必要的导入语句:必须从
itertools导入groupby,从operator导入itemgetter,否则会报未定义的错误。 - Python3中
map()返回的是迭代器对象,直接print只会输出对象地址,转成list才能看到实际的分组结果。
内容的提问来源于stack exchange,提问作者user2241397
相关产品推荐
相关产品推荐

