如何通过迭代和弹出元素来获取列表元素的总和



我有一个列表m = [1,2,3,4]需要通过一次弹出一个元素来迭代元素。第一次第一个元素会弹出,然后是第二个、第三个和第四个

n = []
i = 0
m.pop(i);i += 1;  i < len(m)
# [2+3+4, 1+3+4, 1+2+4, 1+2+3]
n =[9,8,7,6] 

我这样做的方法是遍历一个range,最多到列表中尽可能多的元素,复制列表m并在给定索引处pop元素,并在每次迭代时附加sum

n = []
for i in range(len(m)):
temp = m[:]
temp.pop(i)
n.append(sum(temp))

print(n)
#[9, 8, 7, 6]

你想要的是大小3的组合之和,你可以使用itertools.combinations

from itertools import combinations
m = [1, 2, 3, 4]
s = 3
n = list(map(sum, combinations(m, s)))
print(n)

输出:

[6, 7, 8, 9]

如果要反转输出,只需使用:

n = list(map(sum, combinations(m, s)))[::-1]

输出:

[9, 8, 7, 6]

只需从所有元素的预先计算的总和中减去每个元素:

m = [1,2,3,4]
sum_of_all_elements = sum(m)
n = [sum_of_all_elements - item for item in m]
print(n)

输出:

[9, 8, 7, 6]
sum = 0
while m:
sum += m.pop()

值得一提的是,由于在python中lists是可变的,因此在此操作之后,您最终会得到一个空m

L.E.:没关系;显然,您显然在寻找其他内容,但您的问题文本显然需要调整。上面有很多很好的答案。

最新更新