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

时间:2016-11-21 07:00:42

标签: python list mode

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:更改了代码,以便重复的数字进入新的列表,但它有多个列表项的数量

感谢大家的帮助,我想我现在已经得到了它

2 个答案:

答案 0 :(得分:0)

在您的情况下,即使您考虑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)]

答案 1 :(得分:-1)

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

如果要删除所有单个和重复元素,以下代码将执行:

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

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