Python 查找从上一个数字到下一个数字的累积和

Python 查找从上一个数字到下一个数字的累积和,python,list,Python,List,假设我有一个数字列表: x = [12, 8, 8, 6] 正如你所看到的,第一个数字是12,所以这个数字和下一个数字8的和是20。接下来,20和8的和是28,依此类推 我想要的最终输出是: (12,20)、(20,28)、(28,34) 以下是我尝试过的: from itertools import chain x = [12,8,8] it = chain(x,[0]) result = list(x + next(it) for x in it) print ('\n',result,

假设我有一个数字列表:

x = [12, 8, 8, 6]
正如你所看到的,第一个数字是12,所以这个数字和下一个数字8的和是20。接下来,20和8的和是28,依此类推

我想要的最终输出是:

(12,20)、(20,28)、(28,34)
以下是我尝试过的:

from itertools import chain
x = [12,8,8]
it = chain(x,[0])
result = list(x + next(it) for x in it)
print ('\n',result,'\n')

这可以在理解中使用赋值表达式来记住最后一个数字:

last_num = x[0]
output = [(last_num, last_num:= last_num+i) for i in x[1:]]

大致相当于:

last_num = x[0]
output = []
for i in x[1:]:
    output.append((last_num, last_num + i))
    last_num += i
或者,如果您可以导入
itertools
您可以使用
acumulate

print(*accumulate(x))
12 20 28 34
使用
zip
itertools.tee

from itertools import accumulate, tee

a, b = tee(accumulate(x))
next(b, None)
output = list(zip(a, b))


这可以在理解中使用赋值表达式来记住最后一个数字:

last_num = x[0]
output = [(last_num, last_num:= last_num+i) for i in x[1:]]

大致相当于:

last_num = x[0]
output = []
for i in x[1:]:
    output.append((last_num, last_num + i))
    last_num += i
或者,如果您可以导入
itertools
,则可以使用
acumulate

print(*accumulate(x))
12 20 28 34
使用
zip
itertools.tee

from itertools import accumulate, tee

a, b = tee(accumulate(x))
next(b, None)
output = list(zip(a, b))


我知道您已经用
itertools
尝试过了,所以这里还有一个解决方案:

from itertools import accumulate, tee

i1, i2 = tee(accumulate(x))
next(i2)
print([*zip(i1, i2)])
印刷品:

[(12, 20), (20, 28), (28, 34)]

我知道您已经用
itertools
尝试过了,所以这里还有一个解决方案:

from itertools import accumulate, tee

i1, i2 = tee(accumulate(x))
next(i2)
print([*zip(i1, i2)])
印刷品:

[(12, 20), (20, 28), (28, 34)]

请从下一页重复和。“为我写一些代码”不是堆栈溢出问题。我们希望您做出诚实的尝试,然后就您的算法或技术提出具体问题。堆栈溢出并不是为了取代现有的文档和教程。我曾试图在Jupyter笔记本中解决它,但想具体说明这个问题,所以我只是发布了它,而不是发布了我的代码。我不知道发布我的解决方案是一项要求,所以我在那里犯了一个错误,但你也错误地认为我没有尝试……再次,请参考发布指南。如果您没有展示您的适用作品,我们假设没有。请提供预期的(MRE)。我们应该能够复制和粘贴一个连续的代码块,执行该文件,并再现您的问题以及跟踪问题点的输出。这让我们可以根据您的测试数据和期望的输出来测试我们的建议。显示中间结果与您期望的结果之间的差异。这不相关。我们对您如此简短的原因是这个问题有一个三行解决方案。当我们没有看到任何代码时,我们假设您没有尝试任何操作。让我们看看你尝试了什么。请重复一遍,然后从下一页开始。“为我写一些代码”不是堆栈溢出问题。我们希望您做出诚实的尝试,然后就您的算法或技术提出具体问题。堆栈溢出并不是为了取代现有的文档和教程。我曾试图在Jupyter笔记本中解决它,但想具体说明这个问题,所以我只是发布了它,而不是发布了我的代码。我不知道发布我的解决方案是一项要求,所以我在那里犯了一个错误,但你也错误地认为我没有尝试……再次,请参考发布指南。如果您没有展示您的适用作品,我们假设没有。请提供预期的(MRE)。我们应该能够复制和粘贴一个连续的代码块,执行该文件,并再现您的问题以及跟踪问题点的输出。这让我们可以根据您的测试数据和期望的输出来测试我们的建议。显示中间结果与您期望的结果之间的差异。这不相关。我们对您如此简短的原因是这个问题有一个三行解决方案。当我们没有看到任何代码时,我们假设您没有尝试任何操作。让我们看看你尝试了什么。哇,非常感谢!!!!只有一个问题,在输出中方括号可以删除吗?这是一个列表。。。只需格式化打印就可以了!!我用:new=str(output)[1:-1]删除了括号为什么不干脆
print(*output,sep=',')
Wow非常感谢!!!!只有一个问题,在输出中方括号可以删除吗?这是一个列表。。。只需格式化打印就可以了!!我用:new=str(output)[1:-1]删除了括号,为什么不干脆
print(*output,sep=',')