嗨,所以我试图创建一个函数,我用第二个数字减去第一个数字,然后加上第三个数字,然后减去第四个数字。 x1-x2+x3-x4+x5-x6...
到目前为止,我有这个,我只能添加两个变量,x和y。想着做什么
>>> reduce(lambda x,y: (x-y) +x, [2,5,8,10]
仍然没有得到它
非常简单的东西只是困惑..
答案 0 :(得分:3)
在这种情况下,使用总和会更容易:
a = [2,5,8,10]
sum(a[::2])-sum(a[1::2])
-5
答案 1 :(得分:1)
使用每次添加后恢复为+ - 的乘数。
result = 0
mult = 1
for i in [2,5,8,10]:
result += i*mult
mult *= -1
答案 2 :(得分:1)
您可以使用+
跟踪位置(以及是-
还是enumerate
),您可以使用 -1 这一事实2n 是 +1 , -1 2n + 1 是 -1 。将此作为因子使用sum
所有条款。
>>> sum(e * (-1)**i for i, e in enumerate([2,5,8,10]))
-5
答案 3 :(得分:0)
或者只使用sum和生成器:
In [18]: xs
Out[18]: [1, 2, 3, 4, 5]
In [19]: def plusminus(iterable):
....: for i, x in enumerate(iterable):
....: if i%2 == 0:
....: yield x
....: else:
....: yield -x
....:
In [20]: sum(plusminus(xs))
Out[20]: 3
也可以表示为:
sum(map(lambda x: operator.mul(*x), zip(xs, itertools.cycle([1, -1]))))
答案 4 :(得分:0)
如果确实想要使用reduce,出于某种原因,你可以这样做:
class plusminus(object):
def __init__(self):
self._plus = True
def __call__(self, a, b):
self._plus ^= True
if self._plus:
return a+b
return a-b
reduce(plusminus(), [2,5,8,10]) # output: -5