Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python加减序列_Python - Fatal编程技术网

Python加减序列

Python加减序列,python,Python,大家好,我想做一个函数,用第二个数减去第一个数,然后加第三个数,再减去第四个数,也就是说,x1-x2+x3-x4+x5-x6… 到目前为止,我只能添加两个变量,x和y。我想做什么 >>> reduce(lambda x,y: (x-y) +x, [2,5,8,10] 还是不明白 非常简单的东西让人困惑。使用一个乘法器,在每次加法后还原为+ result = 0 mult = 1 for i in [2,5,8,10]: result += i*mult mul

大家好,我想做一个函数,用第二个数减去第一个数,然后加第三个数,再减去第四个数,也就是说,
x1-x2+x3-x4+x5-x6…

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

>>> reduce(lambda x,y: (x-y) +x, [2,5,8,10]
还是不明白


非常简单的东西让人困惑。

使用一个乘法器,在每次加法后还原为+

result = 0
mult = 1
for i in [2,5,8,10]:
    result += i*mult
    mult *= -1

使用在每次加法后恢复为+-的乘数

result = 0
mult = 1
for i in [2,5,8,10]:
    result += i*mult
    mult *= -1

在这种情况下,使用总和会更容易:

a = [2,5,8,10]
sum(a[::2])-sum(a[1::2])
-5

在这种情况下,使用总和会更容易:

a = [2,5,8,10]
sum(a[::2])-sum(a[1::2])
-5

您可以使用
枚举
,跟踪位置(以及是否执行
+
-
),并且可以使用-12n是+1,-12n+1是-1这一事实。将此作为一个因子,然后对所有术语进行求和

>>> sum(e * (-1)**i for i, e in enumerate([2,5,8,10]))
-5

您可以使用
枚举
,跟踪位置(以及是否执行
+
-
),并且可以使用-12n是+1,-12n+1是-1这一事实。将此作为一个因子,然后对所有术语进行求和

>>> sum(e * (-1)**i for i, e in enumerate([2,5,8,10]))
-5

或者仅使用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]))))

或者仅使用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]))))
如果您真的想使用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
如果您真的想使用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

您将无法使用
reduce
来解决此问题。循环如何?您想了解如何在Python中使用
lambda
s,还是只想了解如何编写函数来计算
x1-x2+x3-x4+x5-x6
?计算函数您将无法使用
reduce
来解决此问题。循环如何?您想了解如何在Python中使用
lambda
s,还是只想了解如何编写函数来计算
x1-x2+x3-x4+x5-x6
?计算函数