rog*_*pvl 11 python foreach list
我正在用python开发一个程序,我只是注意到语言中的foreach循环有问题,或者列表结构.我将简单地给出一个我的问题的通用示例,因为我在我的程序和我的通用示例中都得到了相同的错误行为:
x = [1,2,2,2,2]
for i in x:
x.remove(i)
print x
Run Code Online (Sandbox Code Playgroud)
嗯,这里的问题很简单,我虽然这个代码应该从列表中删除所有元素.好吧,问题是在执行之后,我总是在列表中获得2个剩余元素.
我究竟做错了什么?在此先感谢您的所有帮助.
编辑:我不想清空一个清单,这只是一个例子......
Chr*_*ung 32
这是Python中记录良好的行为,您不应该修改正在迭代的列表.试试这个:
for i in x[:]:
x.remove(i)
Run Code Online (Sandbox Code Playgroud)
该[:]回报的"切片" x,这恰好包含其所有的元素,因此有效的副本x.
我认为,从广义上讲,当你写:
\n\nfor x in lst:\n # loop body goes here\nRun Code Online (Sandbox Code Playgroud)\n\n在幕后,Python 正在做这样的事情:
\n\ni = 0\nwhile i < len(lst):\n x = lst[i]\n # loop body goes here\n i += 1\nRun Code Online (Sandbox Code Playgroud)\n\n如果您插入lst.remove(x)for 循环体,也许您就能明白为什么会得到这样的结果?
本质上,python 使用移动指针来遍历列表。指针首先指向第一个元素。然后删除第一个元素,从而使第二个元素成为新的第一个元素。然后指针移动到新的第二个 \xe2\x80\x93 之前的第三个 \xe2\x80\x93 元素。等等。(如果您使用 [1,2,3,4,5] 而不是 [1,2,2,2,2] 作为示例列表,可能会更清楚)
\n