我需要帮助,每次我在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]
答案 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])