Python:未从lis中删除的项

2024-09-27 00:17:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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)

我一直在做一个mode函数,但是出于某种原因,它会保留列表中的最后几个数字,并且列表中的项目越多,不被删除的项目就越多。你知道吗

编辑:刚刚意识到我忘记了代码的第二部分,现在在

EDIT2:代码缩小了,更容易阅读

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

多谢大家的帮助,我想我现在已经拿到了


Tags: 项目代码in列表forifcountcounter
2条回答

在您的例子中,即使您考虑了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)]

您在迭代列表时正在修改它。通常不建议这样做,因为这样会中断迭代。你知道吗

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

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

这将保留原始列表中的顺序。你知道吗

相关问题 更多 >

    热门问题