在For循环中更新索引值

时间:2013-05-05 13:48:36

标签: python list for-loop indexing

根据列表中的元素,我想更新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个位置并永久更新,而不是将自身恢复到原始值。

2 个答案:

答案 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,但您必须自己增加它,否则您的代码将陷入无限循环。