Python添加/减去序列

时间:2015-02-04 18:59:13

标签: python

嗨,所以我试图创建一个函数,我用第二个数字减去第一个数字,然后加上第三个数字,然后减去第四个数字。 x1-x2+x3-x4+x5-x6...

到目前为止,我有这个,我只能添加两个变量,x和y。想着做什么

>>> reduce(lambda x,y: (x-y) +x, [2,5,8,10]

仍然没有得到它

非常简单的东西只是困惑..

5 个答案:

答案 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