【问题标题】:Updating Index Value in For Loop在 For 循环中更新索引值
【发布时间】:2013-04-29 09:47:01
【问题描述】:

基于在列表中找到的元素,我想更新我的 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 个位置并永久更新,而不是恢复到原来的值。

【问题讨论】:

  • 用简单的英语 - 这应该做什么?

标签: python list for-loop indexing


【解决方案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

【讨论】:

    【解决方案2】:

    使用while 循环:

    datum=0
    while datum < len(lists):
    

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

    【讨论】:

    • 这种语法……有效吗?你能解释一下为什么 OP 没有尝试过吗?
    • 现在不应该是while datum &lt; len(lists)吗?
    猜你喜欢
    • 2015-07-17
    • 2020-12-17
    • 2010-12-29
    • 2019-10-18
    • 1970-01-01
    • 2020-12-11
    • 1970-01-01
    • 2021-07-08
    相关资源
    最近更新 更多