中断 for 循环而不重置其在 Python 中的索引

break a for loop without resetting its index in Python

no_elements = int(input())
seq = list(map(int, input().split()))
new_seq = []
diff = []
diff_opp = []

new_seq.append(seq[0])

for element in range(no_elements - 1):
    diff.append(seq[element + 1] - seq[element])

for element in range(no_elements - 1):
    diff[element] = -diff[element]


for diff_element in range(0, len(diff)):
    print(diff_element)
    for i in range(4):
            print(i)
            new_seq.append(diff[diff_element] + new_seq[i])
            break


print(new_seq)

实际上,我希望我的嵌套(第 2 个)循环只执行 1 次并在每次执行时中断,另外我还希望 i 的值不会在每次我说中断时都被重置使用列表(new_seq)并且我不想使用相同的数字进行相同的工作,而是我希望 i 的值不变并且我可以对整个列表执行逻辑。

顺便说一句,我想计算列表中每两个元素之间的差异,然后找到它的倒数(符号的倒数)并找到一个从原始序列的第一个元素开始的新序列。

这才是真题☝

据我了解,您只想 运行 一次内循环循环并在下一次迭代中保留索引 i 吗?

diff[0] + new_seq[0]
diff[1] + new_seq[1]
diff[2] + new_seq[2]
diff[3] + new_seq[3]
diff[4] + new_seq[0]  <- reset i
..

然后:

i = -1
for element in diff:
    i = (i + 1) % 4
    new_seq.append(element + new_seq[i])

另一种可能的解释是你想要

diff[0] + new_seq[0]
diff[1] + new_seq[0]
diff[2] + new_seq[0]
..
diff[0] + new_seq[1]
diff[1] + new_seq[1]
..

在这种情况下,您需要翻转循环:

for i in range(4):
    for element in diff:
        new_seq.append(element + new_seq[i])

我已经根据您的新信息编辑了我的第一个答案

seq = [-321, 524, 12, 0, 924, -658, -2]
diff = list()

for ii, element in enumerate(seq[1:]):
    diff.append(-(element - seq[ii]))

new_value = seq[0]
new_seq = [new_value]
for value in diff:
    new_value += value
    new_seq.append(new_value)

print(seq)
print(diff)
print(new_seq)

这将给出输出

[-321, 524, 12, 0, 924, -658, -2]
[-845, 512, 12, -924, 1582, -656]
[-321, -1166, -654, -642, -1566, 16, -640]

输出与您的示例相对应

为了完整起见,还有 numpy 版本:

import numpy as np
seq = np.array([-321, 524, 12, 0, 924, -658, -2])
diff = -np.diff(seq)
new_seq = np.cumsum(np.hstack([seq[0], diff]))