Python中使用lambd的整数交替和

2024-04-24 03:09:04 发布

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

我需要用Python编写一个简单的函数来计算一系列整数的交替和。在

示例:[a1,a2,a3,…]将是[a1-a2+a3-a4…]

我需要使用lambda函数来实现这个。在

到目前为止

print reduce(lambda a,b : ((-a) + b), [10, 20, 30, 40])

打印出20个,但应该打印-20个。在

我做错什么了?在


Tags: lambda函数a2示例reducea1整数a3
2条回答

有可能在这样的lambda中包含循环

>>> from itertools import cycle
>>> reduce(lambda a, b, c=cycle((-1, 1)) : a + next(c) * b, [10, 20, 30, 40])
-20

这里的诀窍是reduce只向ab传递值。c在函数创建时只分配一次循环

对于lambda函数,reduce的工作方式如下:

def myReduce(f, L):
    arg1 = L[0]
    for arg2 in L[1:]:
        arg1 = f(arg1, arg2)
    return arg1

如您所见,这将抵消每次运行的总计:

在第一次迭代中,它计算-10 + 20 = 10,然后将其存储为arg1。然后,用参数1030调用lambda,这使它计算-10 + 30 = 20;所以现在arg1取值{}。最后,用2040调用lambda,这使它计算-20 + 40 = 20
看到问题了吗?在

有几种方法可以解决这个问题。以下是一些:

^{pr2}$

或者

answer = 0
for i,elem in enumerate(L):
    mult = [1,-1][i%2]
    answer += elem * mult

或者

mults = itertools.cycle([1,-1])
answer = 0
for elem, mult in zip(L, mults):
    answer += elem, mult

相关问题 更多 >