我的数据如下:
let = ['a', 'b', 'a', 'c', 'a']
如何删除重复项?我希望我的输出是这样的:
['b', 'c']
当我使用set
函数时,我得到:
set(['a', 'c', 'b'])
这不是我想要的。
答案 0 :(得分:2)
一种选择(来自Ritesh Kumar的回答here)
let = ['a', 'b', 'a', 'c', 'a']
onlySingles = [x for x in let if let.count(x) < 2]
给出了
>>> onlySingles
['b', 'c']
答案 1 :(得分:1)
试试这个,
>>> let
['a', 'b', 'a', 'c', 'a']
>>> dict.fromkeys(let).keys()
['a', 'c', 'b']
>>>
答案 2 :(得分:0)
对输入进行排序,然后删除重复项变得微不足道:
data = ['a', 'b', 'a', 'c', 'a']
def uniq(data):
last = None
result = []
for item in data:
if item != last:
result.append(item)
last = item
return result
print uniq(sorted(data))
# prints ['a', 'b', 'c']
这基本上就是shell的cat data | sort | uniq
成语。
成本为O(N * log N),与基于树的集合相同。
答案 3 :(得分:0)
而不是每次都对主列表进行排序,线性扫描和重新计数。
计算出现次数,然后对出现一次的项目进行过滤...
>>> from collections import Counter
>>> let = ['a', 'b', 'a', 'c', 'a']
>>> [k for k, v in Counter(let).items() if v == 1]
['c', 'b']
至少要查看一次序列 - 尽管限制你执行此操作的次数是有意义的。
如果你真的想避免任何类型或set
或其他散列容器(因为你可能不能使用它们?),那么是的,你可以对它进行排序,然后使用:
>>> from itertools import groupby, islice
>>> [k for k,v in groupby(sorted(let)) if len(list(islice(v, 2))) == 1]
['b', 'c']