This question already has answers here:
Modifying list while iterating [duplicate]
(7个答案)
四年前关闭。
我想遍历一个列表,并删除多次计数的项,这样它们就不会被for循环重复打印。
然而,一些只出现在列表中一次的项目似乎也受到了影响,我不明白为什么。
如有任何意见,将不胜感激。
示例输出:
listy = [2,2,1,3,4,2,1,2,3,4,5]
for i in listy:
  if listy.count(i)>1:
    print i, listy.count(i)
    while i in listy: listy.remove(i)
  else:
    print i, listy.count(i)

输出:
 2 4
 3 2
 1 2

因此完全忽略了4和5。

最佳答案

迭代列表时不应修改该列表。这个应该有用:

listy = [2,2,1,3,4,2,1,2,3,4,5]
found = set()
for i in listy:
    if not i in found:
        print i, listy.count(i)
        found.add(i)

结果是:
2 4
1 2
3 2
4 2
5 1

10-02 04:25