遍历列表元素以获得累计和
Loop through list elements to get cumulative sums
我是 python 的新手。我正在尝试创建一个循环,以便我可以获得列表中元素的累计和。例如,给定一个列表 [3, 2, 1] 我希望得到 [3 (第一个数字), 5 (3+2), 6 (3+2+1)], [2 (第二个数字), 3 (2+1)] 和 [1].
我目前拥有的是:
data = [5, 4, 3, 2, 1]
for i in data:
perf = [sum(data[:i+1]) for i in range(len(data))]
print(perf)
我得到以下输出,这是第一个元素的总和。如何修改以获取以 4, 3, ... 开头的累计和?
[5, 9, 12, 14, 15]
[5, 9, 12, 14, 15]
[5, 9, 12, 14, 15]
[5, 9, 12, 14, 15]
[5, 9, 12, 14, 15]
我想要的输出
[5, 9, 12, 14, 15]
[4, 7, 9, 10]
[3, 5, 6]
[2, 3]
[1]
谢谢!
这里有 2 种方法可以解决这个问题。
data = [5, 4, 3, 2, 1]
k = 0;
for i in data:
k = k + i
print(k)
这是第二种方法
data = [5, 4, 3, 2, 1]
k = 0;
for i in range(len(data)):
k = k + data[i]
print(k)
如果我没理解错的话,在第 1 次迭代中,您想从第一个元素求和,在第 2 次迭代中,从第二个元素求和,依此类推:
data = [5, 4, 3, 2, 1]
for i in range(len(data)):
s = 0
l = [s := s + d for d in data[i:]]
print(l)
打印:
[5, 9, 12, 14, 15]
[4, 7, 9, 10]
[3, 5, 6]
[2, 3]
[1]
或者:使用itertools.accumulate
from itertools import accumulate
data = [5, 4, 3, 2, 1]
for i in range(len(data)):
print(list(accumulate(data[i:])))
你离答案不远了。您只需要从列表中的下一个数字开始您的范围。试试这个:
data = [5, 4, 3, 2, 1]
for ind, num in enumerate(data):
perf = [sum(data[ind:i+1]) for i in range(ind, len(data))]
print(perf)
输出:
[5, 9, 12, 14, 15]
[4, 7, 9, 10]
[3, 5, 6]
[2, 3]
[1]
你在循环内计算交换和的说法是正确的。
您刚刚在外循环语句中错误地使用了 i
。
您需要做的就是对原始数据进行切片并为每个切片生成总和。
test_data = [5, 4, 3, 2, 1]
def commulative_sum(a_list: list[int]):
# The same thing you wrote
return [sum(a_list[:i+1]) for i in range(len(a_list))]
def commulative_sums(data: list[int]):
# Slice the input data and generate commulative sums
return [commulative_sum(data[j:]) for j in range(len(data))]
result = commulative_sums(test_data)
print(result)
[[5, 9, 12, 14, 15], [4, 7, 9, 10], [3, 5, 6], [2, 3], [1]]
我是 python 的新手。我正在尝试创建一个循环,以便我可以获得列表中元素的累计和。例如,给定一个列表 [3, 2, 1] 我希望得到 [3 (第一个数字), 5 (3+2), 6 (3+2+1)], [2 (第二个数字), 3 (2+1)] 和 [1].
我目前拥有的是:
data = [5, 4, 3, 2, 1]
for i in data:
perf = [sum(data[:i+1]) for i in range(len(data))]
print(perf)
我得到以下输出,这是第一个元素的总和。如何修改以获取以 4, 3, ... 开头的累计和?
[5, 9, 12, 14, 15]
[5, 9, 12, 14, 15]
[5, 9, 12, 14, 15]
[5, 9, 12, 14, 15]
[5, 9, 12, 14, 15]
我想要的输出
[5, 9, 12, 14, 15]
[4, 7, 9, 10]
[3, 5, 6]
[2, 3]
[1]
谢谢!
这里有 2 种方法可以解决这个问题。
data = [5, 4, 3, 2, 1]
k = 0;
for i in data:
k = k + i
print(k)
这是第二种方法
data = [5, 4, 3, 2, 1]
k = 0;
for i in range(len(data)):
k = k + data[i]
print(k)
如果我没理解错的话,在第 1 次迭代中,您想从第一个元素求和,在第 2 次迭代中,从第二个元素求和,依此类推:
data = [5, 4, 3, 2, 1]
for i in range(len(data)):
s = 0
l = [s := s + d for d in data[i:]]
print(l)
打印:
[5, 9, 12, 14, 15]
[4, 7, 9, 10]
[3, 5, 6]
[2, 3]
[1]
或者:使用itertools.accumulate
from itertools import accumulate
data = [5, 4, 3, 2, 1]
for i in range(len(data)):
print(list(accumulate(data[i:])))
你离答案不远了。您只需要从列表中的下一个数字开始您的范围。试试这个:
data = [5, 4, 3, 2, 1]
for ind, num in enumerate(data):
perf = [sum(data[ind:i+1]) for i in range(ind, len(data))]
print(perf)
输出:
[5, 9, 12, 14, 15]
[4, 7, 9, 10]
[3, 5, 6]
[2, 3]
[1]
你在循环内计算交换和的说法是正确的。
您刚刚在外循环语句中错误地使用了 i
。
您需要做的就是对原始数据进行切片并为每个切片生成总和。
test_data = [5, 4, 3, 2, 1]
def commulative_sum(a_list: list[int]):
# The same thing you wrote
return [sum(a_list[:i+1]) for i in range(len(a_list))]
def commulative_sums(data: list[int]):
# Slice the input data and generate commulative sums
return [commulative_sum(data[j:]) for j in range(len(data))]
result = commulative_sums(test_data)
print(result)
[[5, 9, 12, 14, 15], [4, 7, 9, 10], [3, 5, 6], [2, 3], [1]]