根据列表中的元素,我想更新for循环中的索引值。我相信我已经做到了这一点,但我的Python脚本似乎没有输出正确的值,我无法弄清楚原因:
我的列表如下所示:
dataXY = [['6', 'c', '3', '7', '2', '9', '1', '7'],['8', '4', 'c', '7', '9', '3', '4', '7', '1', '2']]
我的代码就是:
for lists in dataXY:
XYbezier = []
final_lists = []
for datum in range(len(lists)):
if lists[datum] == 'c':
for k in range(-1,4):
if k != 0:
XYbezier.append(lists[datum+k])
else:
if lists[datum-1] == 'c':
datum += 3
if datum != len(lists):
final_lists.append(lists[datum])
else:
final_lists.append(lists[datum])
print datum
它的印刷是这样的: 1 五 3 4 五 6 7 0 1 2 6 4 五 6 7 8 9
出于某种原因,索引值正在重置,但随后恢复(从它从1跳到5然后再回到3)我不明白它为什么这样做,以及我需要索引值跳转3个位置并永久更新,而不是将自身恢复到原始值。
答案 0 :(得分:1)
使用for循环时,索引变量从列表中的值加载。
range(x)
创建列表[0,1,2, ... ,x]
,因此在每次迭代时,datum
(在您的情况下)从该列表中获取新的数值。这会覆盖datum
可能包含的任何值。
您可以通过切换到while
循环来实现目标:
datum = 0
end = len(lists)
while datum < end:
# do stuff
# don't forget to increment datum
datum += 1
答案 1 :(得分:0)
使用while
循环:
datum=0
while datum < len(lists):
在for循环中,只要循环再次开始,datum
的值就会自动重置为range
的下一个值。虽然while
循环不会像for循环一样自动更新datum
,但您必须自己增加它,否则您的代码将陷入无限循环。