Python:未从列表中删除的项目

Python: items not being removed from list

listsal2 = [1,2,2,3,3,4,5,6,7,8]
listsal3 = []

counter = 0
for i in listsal2:
    item = listsal2.count(i)

    if item > 1:
        counter = item 
        while counter > 1:
            listsal3.append(i)   
            counter = counter - 1




print (listsal3)

我一直在研究模式功能,但出于某种原因,它保留了列表中的最后几个数字,列表中的项目越多,没有被删除的项目就越多。

编辑:刚刚意识到我忘记了现在在

中的代码的第二部分

EDIT2:代码被缩小并且更易于阅读

EDIT3:更改代码,使重复的​​数字进入新列表,但它具有列表项的多个数量

感谢大家的帮助,我想我现在已经搞定了

您正在迭代列表的同时修改它。通常不推荐这样做,因为它会破坏迭代。

如果您要删除所有单个元素和重复元素,可以使用以下代码:

l = listsal2
l = [v for i, v in enumerate(l) if l.count(v) > 1 and l.index(v) == i]

这将保留原始列表中的顺序。

在您的情况下,即使您考虑了 i=2 一次,您仍会再次浏览列表 2,因为它存在多次。这就是为什么 2 和 3 两次出现在 listsal3 中的原因。相反,您要做的只是为每个唯一项目浏览一次列表。

listsal2 = [1,2,2,3,3, 4]
newlist = set(listsal2)
listsal3 = []

counter = 0
for i in newlist:
    item = listsal2.count(i)

    if item > 1:
        counter = item 
        print counter
        while counter > 1:
            listsal3.append(i)   
            counter = counter - 1

print listsal2, listsal3

要从列表中获取独特的项目,请将其转换为集合。

另一种方法: 简单地保留一个包含每个唯一元素的计数的列表,取它的最大值,然后追溯到它对应的元素。

newset = set(listsal2)
newlist = list(set)
counts = []

for item in newlist:
    counts.append(listsal2.count(item))
maxcount = max(counts)
max_occurring_item = newlist[counts.index(maxcount)]