Python列表删除问题

时间:2013-07-25 21:58:47

标签: python list python-2.6

我正从列表中删除元素。但是使用for遍历元素,我可以看到正在访问备用元素,因此所有元素都不会被删除。

代码

l = ['A','B','C','D','E','F']
for x in l:
    l.remove(x)
    print "My List:"+str(l)
print "Final List:"+str(l)

输出

My List:['B', 'C', 'D', 'E', 'F']
My List:['B', 'D', 'E', 'F']
My List:['B', 'D', 'F']
Final List:['B', 'D', 'F']

你能不能在这个逻辑中进行任何修改来解决这个问题。或者,如果有更好的方法。

5 个答案:

答案 0 :(得分:5)

你不应该修改你正在迭代的列表,否则你一定会得到奇怪的结果。

而是迭代列表的副本:

for x in l[:]:
    l.remove(x)

答案 1 :(得分:1)

不是从列表中删除元素,而是可以将其分割:

l = ['A','B','C','D','E','F']
for i in range(len(l) + 1):
    print "My List:"+str(l[i:])

答案 2 :(得分:1)

复制列表的替代方法(并且根据上下文更有意义):

In [1]: from collections import deque
In [2]: l = deque(['A','B','C','D','E','F'])
In [3]: while len(l) > 0:
   ...:     l.popleft()
   ...:     print l
   ...:     
deque(['B', 'C', 'D', 'E', 'F'])
deque(['C', 'D', 'E', 'F'])
deque(['D', 'E', 'F'])
deque(['E', 'F'])
deque(['F'])
deque([])

答案 3 :(得分:1)

这个怎么样?这不构成任何新列表。

l = ['A','B','C','D','E','F']
while l: del l[0]; print("My List:"+str(l))

print("Final List:"+str(l))

答案 4 :(得分:0)

看起来你想要的只是删除列表中的所有元素。我想你可以使用:

l = []

如果有条件,您可以使用列表理解:

[x for x in l in if x ...]