我正在尝试从列表中删除重复元素,它的重复数是奇数。
例如下面的列表:[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]
,但我相信这可以用更好的方式编写。有什么想法吗?在
如果顺序无关紧要:
列表理解
[x for x in a if a.count(x)%2 == 1]
只返回在列表中出现奇数次的元素。list(set(...))
是从列表中删除重复项的常用方法。在您可以使用^{} 和列表理解,如下所示
Counter
给出了一个字典,输入iterable中的每个元素都是键,它们对应的计数是值。所以,我们迭代这个dict,检查计数是否为奇数,并只过滤掉那些项目。在注意:这个解决方案的复杂性仍然是O(N),就像您最初的程序一样。在
您可以使用^{} :
相关问题 更多 >
编程相关推荐