1

我正在从列表中删除元素。但是使用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']

您能否在此逻辑中提出任何可以解决问题的修改。或者,如果有更好的方法来解决这个问题。

4

5 回答 5

5

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

而是遍历列表的副本:

for x in l[:]:
    l.remove(x)
于 2013-07-25T21:59:57.897 回答
1

您可以将其切片,而不是从列表中删除元素:

l = ['A','B','C','D','E','F']
for i in range(len(l) + 1):
    print "My List:"+str(l[i:])
于 2013-07-25T22:07:40.230 回答
1

复制列表的替代方法(考虑到上下文,imo 会更有意义):

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([])
于 2013-07-25T22:08:06.077 回答
1

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

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

print("Final List:"+str(l))
于 2013-07-25T22:12:50.573 回答
0

看来您想要的只是从列表中删除所有元素。我认为您可以使用:

l = []

或者,如果有条件,您可以使用列表推导:

[x for x in l in if x ...]
于 2013-07-25T22:10:35.650 回答