将元组用作lambda的参数会引发有关缺少必需位置参数的错误

2024-05-31 23:40:43 发布

您现在位置:Python中文网/ 问答频道 /正文

在另一个线程(Python splitting list based on missing numbers in a sequence)中,我找到了以下解决方案:

data = [1,  4,5,6, 10, 15,16,17,18, 22, 25,26,27,28]

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

我是Python新手,并尝试将其改编为Python 3.4:

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

我得到这个错误:

<lambda>() missing 1 required positional argument: 'x'

我(有限的)理解是groupby语句中的键函数仍然链接到需要两个参数的lambda函数。是这样吗?更重要的是,有没有办法修改上述代码?这是一个非常优雅和紧凑的解决方案


Tags: lambda函数inmapfordata解决方案线程
1条回答
网友
1楼 · 发布于 2024-05-31 23:40:43

我的回答有点晚了,但我希望它对未来会有帮助。 是的,你说得对。Python 2的翻译问题>;Python3的事实是Python3中的lambda不接受元组作为参数。 但是,有一个解决方案,它是通过将预期的序列参数绑定到单个参数,然后对该参数进行索引来实现的:

lambda (i,x):i-x

将成为:

lambda x: x[1]-x[0]

因此,在Python 3中工作的代码是:

from operator import itemgetter
import itertools
# Find runs of consecutive numbers using groupby.  The key to the solution
# is differencing with a range so that consecutive numbers all appear in
# same group.
L = [ 1,  4,5,6, 10, 15,16,17,18, 22, 25,26,27,28]
for k, g in itertools.groupby( enumerate(L), lambda x: x[1]-x[0] ) :
  print (list(map(itemgetter(1), g)))

这将输出:

[1]
[4, 5, 6]
[10]
[15, 16, 17, 18]
[22]
[25, 26, 27, 28]

请在此处查看有关具有元组的lambda的更多信息: python3-equivalent-for-auto-tuple-unpacking-in-lambda

相关问题 更多 >