对于Python3中的循环,使用变量[i-1]

时间:2018-01-14 11:48:44

标签: python python-3.x loops for-loop

我需要帮助,每次我在Python3中使用for循环,如:

for i in range(len(sequence)):

我写道:

sequence[i-1]

在第一个循环中它获取序列的最后一个数字,我该如何改变它?

示例:

a=(10,15,20)
for i in range(len(a)):
    a[i]=a[i-1]+a[i]

我想要

  

[10,25,35]

但是我得到了

  

[45,25,35]

5 个答案:

答案 0 :(得分:1)

使用range(1,len(a))因为如果您使用range(len(a)),则迭代将从0开始,这将导致a[i-1]a[-1],这将导致最后一个值。

答案 1 :(得分:0)

试试这个:

a=[10,15,20]
b=[a[i]+a[i-1] for i in range(1,len(a))]
b.insert(0,a[0])
print(b)

输出:

[10, 25, 35]

答案 2 :(得分:0)

在for循环的第一次迭代中,i = 0。 i-1等于-1。 a [-1]找到最后一项“a”,因此10 + 35为45。

要修复,使用范围(1,len(a))如图所示忽略第一项:

a=[10,15,20]
for i in range(1, len(a)):
    a[i]=b[i-1]+a[i]

这会产生另一个问题 - a的第二个值现在是25,而不是15.所以最后的输出是45,而不是35。

要解决此问题,请创建“a”

的副本
a=[10,15,20]
b=[10,15,20]
for i in range(1, len(a)):
    a[i]=b[i-1]+a[i]

因此,如果你要输出一个,你就会得到

[10,25,35]

根据需要。

答案 3 :(得分:0)

还可以尝试删除索引(第一个除外):

a = (10, 15, 20)
result = [a[0]] + [(x + y) for x, y in zip(a[:-1], a[1:])]
assert result == [10, 25, 35]

答案 4 :(得分:0)

回答标题中的问题:a[-1]将始终为您提供最后一个元素,但您无法更改。

但您仍然可以使代码正常工作:

首先,除了您询问的问题之外,您的代码中还有一些问题:

  • 您当前的代码甚至无法运行,您无法在元组中重新分配值
  • 即使a是一个列表,它也不会给你想要的输出,因为你正在改变值,所以第一对之后的所有内容都是错误的

我假设您想要做的是对所有对进行求和并用该对替换每个数字,除了第一个应该相同的数字

你可以通过多种方式做到这一点,但这里有一个非常简单易懂的方法:

a = [10,15,20]
b = [a[0]]
for i in range(1,len(a)):
    b.append(a[i] + a[i-1])

现在b看起来像这样:[10, 25, 35]

或者如果你想在没有附加清单的情况下这样做,你可以反过来:

a = [10,15,20]
for i in range(len(a),1,-1):
     a[i] = a[i] + a[i-1])