我发现了一个谜题,无法找出它的工作原理。
x = ['a','b','c']
for m in x:
x.remove(m)
并在此循环x = ['b']
之后。
但为什么?
据我所知for
关键字隐式为此列表创建迭代器。 .remove()
调用__next__()
方法是否会跳过b
?我无法找到它,但这是我最好的猜测。
答案 0 :(得分:2)
在这里,您将遍历原始列表。在第一次迭代中,您删除了0th
索引元素,即a
。现在,您的列表为:['b','c']
。在第二次迭代中,您的for
循环将访问索引1
处的值,但您的索引1
的值为c
。因此删除了c
。因此,结果列表将是['b']
。
为了使其行为符合预期,迭代列表的副本,并从原始列表中删除该项目。例如:
x = ['a','b','c']
for m in list(x): # <-- Here 'list(x)' will create the copy of list 'x'
# for will iterate over the copy
x.remove(m)
# updated value of 'x' will be: []
注意:如果它不是用于演示目的而您使用此代码清空列表,则清空列表的有效方法是:
del x[:]