中断 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]))
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]))