Python 如何打印列表中当前元素和上一个元素的总和

Python 如何打印列表中当前元素和上一个元素的总和,python,list,Python,List,我正在尝试遍历一个数字列表,并使用python打印当前元素和前一个元素的总和。比如说, 给定数字=[5,10,15,20,25,30,30],输出应为5,15,25,35,45,55,60,。这是我尝试过的以下代码,它与答案非常接近,但第一个元素是错误的 number=[5,10,15,20,25,30,30] i=0 对于范围(1,8)内的x: 打印(数字[i]+数字[i-1],end=“,”) i+=1 我得到了输出35,15,25,35,45,55,60,。我做错了什么?您从I=0开始,

我正在尝试遍历一个数字列表,并使用python打印当前元素和前一个元素的总和。比如说,

给定
数字=[5,10,15,20,25,30,30]
,输出应为
5,15,25,35,45,55,60,
。这是我尝试过的以下代码,它与答案非常接近,但第一个元素是错误的

number=[5,10,15,20,25,30,30]
i=0
对于范围(1,8)内的x:
打印(数字[i]+数字[i-1],end=“,”)
i+=1

我得到了输出
35,15,25,35,45,55,60,
。我做错了什么?

您从
I=0
开始,因此您添加的第一个数字是
0
-1
(在本例中是最后一个)。这就是您获得
35
5+30
)的原因。

您从索引
0
开始,您的预期输出似乎从索引
1
开始:

这里有一个更好的解决方案:

number=[5,10,15,20,25,30,30]
对于范围内的i(len(数字)):
如果i==0:
打印(数字[i])
其他:
打印(数字[i-1]+数字[i])
产出:

5
15
25
35
45
55
60
这应该起作用:

number=[5,10,15,20,25,30,30]
输出=[numbers[i]+numbers[i-1],如果i>0,则为范围内的i(len(numbers))]
打印(输出)

您可以将
数字的相邻项配对,方法是将其本身压缩,但将其中一项填充为
0
,这样您就可以在配对中迭代以在列表中输出总和:

[a + b for a, b in zip([0] + numbers, numbers)]
或者通过将对映射到
sum
函数:

list(map(sum, zip([0] + numbers, numbers)))
双方都将返回:

[5, 15, 25, 35, 45, 55, 60]

此列表适用于:

number=[5,10,15,20,25,30,30]
输出=[value+numbers[i-1]如果i的值为i,则枚举中的值(numbers)]
打印(输出)
>>> [5, 15, 25, 35, 45, 55, 60]

作弊,并在开始处添加一个
[0]
,以防止第一个总和出错。 不过,最后您会遇到问题,因为
枚举
中的列表比原始列表长一个项目,所以也要剪掉最后一个数字:

print ([a+numbers[index] for index,a in enumerate([0]+numbers[:-1])])
结果:

[5, 15, 25, 35, 45, 55, 60]
如果要了解其工作原理,请在添加之前打印原始数字:

>>> print ([(a,numbers[index]) for index,a in enumerate([0]+numbers[:-1])])
[(0, 5), (5, 10), (10, 15), (15, 20), (20, 25), (25, 30), (30, 30)]

枚举
循环遍历已更改的列表
[0,5,15,…55]
,其中所有内容都上移了一个位置,但
编号[index]
仍然返回原始列表中的正确索引。将它们相加可以得到正确的结果。

为什么要使用
x
,而不是
i
?这里最大的问题是,您将
for循环的模式
while循环的模式
混淆了。在这两个循环之间的斗争中,我支持
支持
:)。@Felipe的答案完美地捕捉到了如何通过
for
循环来实现这一点。没有什么比通过一些压缩破解的解决方案更漂亮的了+1我喜欢tooThis是教初学者的一个极好的解决方案的想法(从OP的代码来看,可以放心地假设他们是初学者)。这个解决方案是完美的,因为它用他们自己的原始思维模式指导OP。了解了这一点后,他们可以继续使用“高级”解决方案,如@blhsing's