2024-04-24 03:09:04 发布
网友
我需要用Python编写一个简单的函数来计算一系列整数的交替和。在
示例:[a1,a2,a3,…]将是[a1-a2+a3-a4…]
我需要使用lambda函数来实现这个。在
到目前为止
print reduce(lambda a,b : ((-a) + b), [10, 20, 30, 40])
打印出20个,但应该打印-20个。在
我做错什么了?在
有可能在这样的lambda中包含循环
>>> from itertools import cycle >>> reduce(lambda a, b, c=cycle((-1, 1)) : a + next(c) * b, [10, 20, 30, 40]) -20
这里的诀窍是reduce只向a和b传递值。c在函数创建时只分配一次循环
reduce
a
b
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。然后,用参数10和30调用lambda,这使它计算-10 + 30 = 20;所以现在arg1取值{}。最后,用20和40调用lambda,这使它计算-20 + 40 = 20。 看到问题了吗?在
-10 + 20 = 10
arg1
10
30
-10 + 30 = 20
20
40
-20 + 40 = 20
有几种方法可以解决这个问题。以下是一些:
或者
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
有可能在这样的lambda中包含循环
这里的诀窍是
reduce
只向a
和b
传递值。c
在函数创建时只分配一次循环对于lambda函数,
reduce
的工作方式如下:如您所见,这将抵消每次运行的总计:
在第一次迭代中,它计算}。最后,用
-10 + 20 = 10
,然后将其存储为arg1
。然后,用参数10
和30
调用lambda,这使它计算-10 + 30 = 20
;所以现在arg1
取值{20
和40
调用lambda,这使它计算-20 + 40 = 20
。看到问题了吗?在
有几种方法可以解决这个问题。以下是一些:
^{pr2}$或者
或者
相关问题 更多 >
编程相关推荐