在数字列表上添加和减去之间交替

时间:2016-10-08 14:23:06

标签: python list

如何在python中获得1-2 + 3-4 + 5-6 + 7-8 + 9-10系列的总和?

我知道如何通过这种方式使用while循环来获得从1到特定数字的数字之和:

i = 1
sum = 0
while i<= 10:
    sum = sum + i
    i = i + 1
print(sum)

6 个答案:

答案 0 :(得分:2)

鉴于您尝试替换该符号,您可以使用(-1)**n也替换该符号的事实。但是,当n即使您需要(-1)**(n-1)

时,您希望为负数
>>> list(n*(-1)**(n-1) for n in range(1, 11))
[1, -2, 3, -4, 5, -6, 7, -8, 9, -10]
>>> sum(n*(-1)**(n-1) for n in range(1, 11))
-5

这可以转换为显式循环解决方案:

t = 0
for n in range(1, 11):
    t += n*(-1)**(n-1)
print(t) # -5

答案 1 :(得分:1)

您的代码需要进行非常小的更改:

i = 1
sum = 0
sign = 1
while i<= 10:
    sum = sum + sign * i
    sign = sign * -1
    i = i + 1
print(sum)

有更多的pythonic方法可以满足你的要求 - 但是他们需要更多的知识..

答案 2 :(得分:1)

你应该这样做:

i = 1
my_sum = 0
while i<= 10:
    if i % 2:  # True, if i is divisible by 2
        my_sum -= i
    else:
        my_sum += i 
    i += 1  # same as i = i + 1

其他一些替代方法:

>>> sum((i if i % 2  else -i) for i in range(1, 11))
-5
>>> sum(map(lambda x: x if x %2 else -x, range(1, 11)))
-5

答案 3 :(得分:1)

它也可以被视为sum of odd减去sum of even

sum(range(1, 11, 2)) - sum(range(2, 11, 2))

答案 4 :(得分:1)

将此扩展为更简单的线性解决方案,适用于任何n系列:

def sum_subtract(n):
    return n // 2 * -1 + n % 2 * n

每对数字(1 - 2)+(3 - 4)+等等于-1,所以你只需要除以2并乘以-1。接下来如果最后有一个奇数(n%2),你可以添加它。

答案 5 :(得分:-3)

您可以使用像

这样的生成器表达式
>>> sum(v if v%2 else -v for v in range(11))
-5

这里我们检查索引是偶数还是奇数并相应地添加数字。

另一种方法可以使用zip内置,但这只适用于偶数范围。

>>> sum(x-y for x,y in zip(l[::2],l[1::2]))
-5

您可以使用iter来避免切片并减少代码大小。 iter创建一个迭代器,只要它被调用就会耗尽。

>>> i = iter(l)
>>> sum(x-y for x,y in zip(i,i))
-5