我想要做的是按顺序减去该列表中的所有项目:
>>> 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
答案 0 :(得分:8)
您可以使用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()
是内置的,因此您无需导入它。
答案 1 :(得分:2)
您可以遍历数组并减去:
result = ListOfNumbers[0]
for n in ListOfNumbers[1:]:
result -= n
或者,正如vaultah所指出的那样:
result = ListOfNumbers[0] - sum(ListOfNumbers[1:])
答案 2 :(得分:2)
使用itertools.accumulate
和operator.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]
答案 3 :(得分:0)
另一种方法,假设项目为输入列表。
if len(items) == 0:
print(0)
elif len(items) == 1:
print(items[0])
else:
print(items[0] - sum(items[1:]))