繁体   English   中英

仅保留列表中唯一项目的最有效方法?

[英]Most efficient way of keeping only the unique items in a list?

所以我对Python比较陌生,试图弄清楚在列表中只保留唯一项目的最佳方法。 我目前的实现涉及计数器,字典和列表推导,但我不确定什么可能更快。

这是我尝试过的一个例子:

l = ['a', 'b', 'a']
d = dict(Counter(l))
[key for key, val in d.items() if val == 1]
>>> ['b']

此外,这只适用于字符串而不是整数,我不知道为什么。

你只想要一次存在的东西吗?

>>> 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])

Python有一个内置类型,用于确保列表中的成员是唯一的,它是一个集合 使用你的例子:

l = ['a', 'b', 'a']
set(l)
>>> ['a','b']

通常,您可以通过从列表转换为集合并再次返回来从列表中“清洗”重复成员。 例如:

l = ['a', 'b', 'a']
list(set(l))
>>> ['a','b']

这会将列表重新转换为可变(可编辑)列表,并确保性能和便利性的最佳组合。

你做这件事的方式没有错。 虽然这个词是超级愚蠢的。 这非常有效,但只有在“密钥”全部可以清洗时才有效

[k for k,v in Counter(L).iteritems() if v==1]

如果要删除重复项,请使用 ,然后将结果重新转换为列表:

ls = [1, 2, 3, 3, 3, 'a', 'b', 'b', 'c']
unique = list(set(ls))
# unique is ['a', 1, 2, 3, 'c', 'b']

请注意,此操作不会保留元素的顺序。

如果您不关心订单,只需使用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]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM