我有以下代码,它使用 for 循环只删除了列表的一半。为什么会这样?另外,我应该如何在遍历列表时删除列表的第一个元素?
list = [1,2,3,4,5,6,7,8,9,10]
for x in list:
print list[0]
del list[0]
print list
输出:
1
2
3
4
5
[6, 7, 8, 9, 10]
请您参考如下方法:
问题是您从列表中删除,但列表迭代器不知道并愉快地处理“剩余”列表。
所以在第一次迭代中迭代器位于索引 0 并且您删除了索引 0,在下一次迭代中迭代器返回索引 1(在您删除第一个项目之前它是索引 2 处的项目)并且它删除了索引 0 . 在下一次迭代中,您将获得索引 2 处的项目(最初位于索引 4 处,但由于您删除了两个项目,现在位于索引 2 处)等等。最后,只要索引大于列表中剩余的项目,它就会停止,前提是您为每个处理过的项目删除了一个项目,该项目位于原始列表的中间(一半)。
长话短说:不要修改您正在迭代的列表。
如果你真的想做那样的事情,那么你可以使用 while 循环:
lst = [1,2,3,4,5,6,7,8,9,10]
while lst: # as long as the lst contains items
print lst[0]
del lst[0]
print lst
或遍历副本:
lst = [1,2,3,4,5,6,7,8,9,10]
for x in lst[:]: # [:] makes a shallow copy of a list
print lst[0]
del lst[0]
print lst
注意:list是Python内置函数的名字,所以如果你有一个同名的变量,你会隐藏这个函数。这就是我将变量名称更改为 lst 的原因。
