从lis中删除非重复字符

2024-04-19 16:51:27 发布

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

我试图从python中的列表中删除非重复字符。e、 g list=[1,1,2,3,3,3,5,6]应返回[1,1,3,3]。 我最初的尝试是:

def tester(data):
    for x in data:
        if data.count(x) == 1:
            data.remove(x)
    return data

这对某些输入有效,但对于[1,2,3,4,5],它返回[2,4]。有人能解释一下为什么会这样吗?在


Tags: in列表fordatareturnifdefcount
3条回答

有一个线性时间解决方案:

def tester(data):
    cnt = {}
    for e in data:
        cnt[e] = cnt.get(e, 0) + 1
    return [x for x in data if cnt[x] > 1]
 l=[1,1,2,3,3,3,5,6]

 [x for x in l if l.count(x) > 1] 
 [1, 1, 3, 3, 3]

添加列表中至少出现两次的元素。在

在您自己的代码中,您需要将for x in data行更改为for x in data[:]:

使用data[:]可以迭代原始列表的copy。在

发生这种情况是因为您在遍历列表时正在从列表中删除。相反,可以考虑添加到新列表中。在

你也可以用集合。计数器,如果您使用的是2.7或更高版本:

[a for a, b in collections.Counter(your_list).items() if b > 1]

相关问题 更多 >