所以我对Python比较陌生,试图找出在列表中只保留唯一项目的最佳方法。我目前的实现涉及计数器,字典和列表推导,但我不确定什么可能更快。
这是我尝试过的一个例子:
l = ['a', 'b', 'a']
d = dict(Counter(l))
[key for key, val in d.items() if val == 1]
>>> ['b']
此外,这仅适用于字符串而不是整数,我不知道为什么。
答案 0 :(得分:5)
你只想要一次存在的东西吗?
>>> c=Counter(['a','b','a'])
>>> [n for n in c if c[n]==1]
['b']
>>> c=Counter([1,2,3,2,3,4,5,6,5,6])
>>> [n for n in c if c[n]==1]
[1, 4]
或者只列出一些独特的东西?
>>> set([1,2,3,2,3,4,5,6,5,6])
set([1, 2, 3, 4, 5, 6])
答案 1 :(得分:4)
Python有一个内置类型,用于确保列表中的成员是唯一的,它是set。使用您的示例:
l = ['a', 'b', 'a']
set(l)
>>> ['a','b']
通常,您可以通过从列表转换为集合并再次返回来从列表中“清洗”重复成员。例如:
l = ['a', 'b', 'a']
list(set(l))
>>> ['a','b']
这会将列表重新变为可变(可编辑)列表,并确保性能和便利性的最佳组合。
答案 2 :(得分:1)
你做这件事的方式没有错。虽然这个词是超级愚蠢的。这非常有效,但只有在“密钥”都可以清洗时才能使用
[k for k,v in Counter(L).iteritems() if v==1]
答案 3 :(得分:0)
如果您要删除重复的项目,请使用set,然后将结果重新转换为列表:
ls = [1, 2, 3, 3, 3, 'a', 'b', 'b', 'c']
unique = list(set(ls))
# unique is ['a', 1, 2, 3, 'c', 'b']
请注意,此操作不会保留元素的顺序。
答案 4 :(得分:0)
如果您不关心订单,请使用set()
。但是,以下内容将保留顺序:
l = ['a', 'b', 'c', 'a', 'c', 'd']
a = []
for item in l:
if item not in a: a.append(item)
或仅保留唯一的项目:
l = [item for item in l if l.count(item) == 1]