python - 从列表中删除重复元素,但只删除那些重复元素为奇数的元素

标签 python list

我正在尝试从列表中删除重复元素,重复元素的数量是奇数。 例如下面的列表:[1, 2, 3, 3, 3, 5, 8, 1, 8] 我有 1 个重复 2 次,3 个重复 3 次,8 个重复 2 次.所以 1 和 8 应该不存在,而不是 3 的 3 个元素,我只需要留下 1。

这是我想出的:

def remove_odd_duplicates(arr):
    h = {}
    for i in arr:
        if i in h:
            h[i] += 1
        else:
            h[i] = 1

    arr = []
    for i in h:
        if h[i] % 2:
            arr.append(i)

    return arr

它正确返回所有内容:[2, 3, 5],但我相信可以用更好的方式编写。有什么想法吗?

最佳答案

您可以使用 collections.Counter和列表理解,像这样

data = [1, 2, 3, 3, 3, 5, 8, 1, 8]
from collections import Counter
print [item for item, count in Counter(data).items() if count % 2]
# [2, 3, 5]

Counter 给出了一个字典,输入中的每个可迭代元素作为键,它们对应的计数作为值。因此,我们遍历该字典并检查计数是否为奇数并仅过滤掉那些项目。

注意:这个解决方案的复杂度仍然是 O(N),就像您的原始程序一样。

关于python - 从列表中删除重复元素,但只删除那些重复元素为奇数的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26451046/

相关文章:

python - 是否可以在 Gitlab CI 上运行 X11?

c# - Python 到 C# 代码解释

python - 检查python中的srt文件中是否存在原始数据的任何元素

java - 在Java中的Collections对象中声明类型参数两次

python - 向 python 元组添加条目

android - 用 list<> 填充 builder.setItem

python - numpy array 指定一个默认值

python - python导入中的大小写标准

java - 如何将字符串对象重新转换为 ArrayList<Entity>?

c++ - 为什么迭代器指向的数据在从列表中删除后仍保留