Python:在循环运行时更改循环参数
我想把for循环中的a改成[4,5,6]。这段代码现在只打印出:1, 2, 3。
a = [1,2,3]
for i in a:
global a
a = [4,5,6]
print i
我想要的输出是 1, 4, 5, 6
。
3 个回答
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
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 值开始一个新的循环。
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 的文档来看:
在循环中修改正在迭代的序列是不安全的(这只会发生在可变序列类型,比如列表)。如果你需要修改正在迭代的列表(例如,复制选中的项目),你必须对它的一个副本进行迭代。
补充:如果根据评论你是想遍历网址,那你需要更复杂的逻辑来进行深度优先或广度优先的遍历,而不仅仅是用一个列表(顶层链接)替换另一个列表(第一页的链接)。在你的例子中,一旦进入第一页,你就完全失去了对第二页和第三页的跟踪。