Python:在循环运行时更改循环的参数

时间:2011-11-12 11:32:10

标签: python for-loop

我想将for循环中的a更改为[4,5,6]。 此代码只打印:1,2,3

a = [1,2,3]

for i in a:
    global a
    a = [4,5,6]
    print i

我想要ouput 1, 4, 5, 6

3 个答案:

答案 0 :(得分:3)

您需要澄清这个问题,因为没有解释当您的输入为[1,2,3]时如何得出所需的输出1,4,5,6。以下产生了所需的输出,但它完全是临时的,没有任何意义:

i = 0
a = [1, 2, 3]
while i < len(a):
    print(a[i])
    if a[i] == 1:
        a = [4, 5, 6]
        i = 0          # edit - good catch larsmans
    else:
        i += 1

重点是在循环执行时不能修改for循环的参数。从python文档:

  

修改循环中迭代的序列是不安全的   (这只能发生在可变序列类型中,例如列表)。如果   你需要修改你正在迭代的列表(例如,到   重复所选项目)您必须遍历副本。

编辑:如果根据您尝试浏览网址的评论,您需要更复杂的逻辑来执行深度优先或广度优先,而不是仅仅将一个列表(顶级链接)替换为另一个列表(链接)在第一页)。在您的示例中,您在深入第1页后完全忘记了第2页和第3页。

答案 1 :(得分:0)

问题在于作业

a = [4,5,6]

只更改变量a,而不是基础对象。有多种方法可以解决这个问题;一个是使用像

这样的while循环
a = [1,2,3]

i = 0
while i<len(a):
    print a[i]
    a = [4,5,6]
    i += 1

打印

1
5
6

答案 2 :(得分:0)

如果您在代码中的有用位置打印id(a),您就会明白为什么这不起作用。

即使是这样的东西也行不通:

a = [1,2,3]

def change_a(new_val):
    a = new_val

for i in a:
    change_a([4,5,6])
    print i

我认为不可能做你想做的事。打破当前循环并使用新值a开始一个新循环。