如何使用Python从列表中减去所有项?

3
我想做的是按顺序从列表中减去所有项:
>>> ListOfNumbers = [1,2,3,4,5,6,7,8,9,10]
>>> 1 - 2 - 3 - 4 - 5 - 6 - 7 - 8 - 9 - 10  # should be computed
-53
4个回答

9
您可以使用reduce()函数:
>>> from functools import reduce
>>> lst = [1,2,3,4,5,6,7,8,9,10]
>>> reduce(lambda x, y: x - y, lst)
-53

或者使用 operator.sub 而不是 lambda:
>>> import operator
>>> reduce(operator.sub, lst)
-53

请注意,在Python 2.x中,reduce()是一个内置函数,所以您不需要导入它。

为什么更喜欢使用lambda而不是operator.sub - undefined
没有 - 如果你愿意的话,你可以使用operator.sub。我猜,它甚至可能稍微更高效一些。 - undefined
1
请考虑以下内容:https://dev59.com/R3VC5IYBdhLWcg3wykej - undefined

2
你可以遍历数组并进行减法操作:
result = ListOfNumbers[0]
for n in ListOfNumbers[1:]:
    result -= n

或者,正如vaultah指出的那样:
result = ListOfNumbers[0] - sum(ListOfNumbers[1:])

这样会得到一个错误的结果。 - undefined
@vaultah,问题已解决。 - undefined
4
为什么不选 ListOfNumbers[0] - sum(ListOfNumbers[1:]) 呢? - undefined

2
使用 itertools.accumulateoperator.sub 函数:
import itertools, operator

l = [1,2,3,4,5,6,7,8,9,10]
print(list(itertools.accumulate(l, operator.sub))[-1])   # -53

这并不意味着比已发布的functools.reduce()解决方案更好,但它提供了一个额外的功能——每对数字进行减法运算时都能得到中间结果(第一项作为起始点):

[1, -1, -4, -8, -13, -19, -26, -34, -43, -53]

0
另一种做法是,假设输入列表为items。
if len(items) == 0:
    print(0)
elif len(items) == 1:
    print(items[0])
else:
    print(items[0] - sum(items[1:]))

可能需要适当格式化这个吗? - undefined
格式化代码 @aws_apprentice - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接