2

基于在列表中找到的元素,我想更新我的 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 5 3 4 5 6 7 0 1 2 6 4 5 6 7 8 9

出于某种原因,索引值正在被重置,但随后又恢复了(从它如何从 1 跳到 5 然后又回到 3)我不明白它为什么这样做,我需要索引值跳转 3 个位置并永久更新而不是将自身恢复到其原始值。

4

2 回答 2

1

当您使用 for 循环时,索引变量是从列表中的值加载的。 在每次迭代时range(x)创建列表, (在您的情况下)从该列表中获取一个新的数值。这会覆盖任何可能持有的值。[0,1,2, ... ,x]datumdatum

您可以通过切换到while循环来实现您的目标:

datum = 0
end = len(lists)
while datum < end:
    # do stuff

    # don't forget to increment datum
    datum += 1
于 2013-05-05T13:56:15.300 回答
0

使用while循环:

datum=0
while datum < len(lists):

在 for 循环中,一旦循环再次开始,的值datum将自动重置为下一个值。range虽然while循环不会datum像 for-loop 那样自动更新,但您必须自己增加它,否则您的代码将陷入无限循环。

于 2013-05-05T13:51:13.260 回答