我想将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
。
答案 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开始一个新循环。