我正从列表中删除元素。但是使用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']
你能不能在这个逻辑中进行任何修改来解决这个问题。或者,如果有更好的方法。
答案 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 ...]