我有一个项目列表:
mylist = ['A','A','B','C','D','E','D']
我想返回一个在mylist中出现多次的唯一项目列表,以便我所需的输出为:
[A,D]
不确定如何成为这个,但我的过程是首先追加每个项目的计数,然后删除等于1的任何内容。然后重复数据删除,但这似乎是一个非常迂回,低效的方法,所以我正在寻求建议。
答案 0 :(得分:11)
您可以使用collections.Counter
轻松完成您所描述的内容:
from collections import Counter
mylist = ['A','A','B','C','D','E','D']
cnt = Counter(mylist)
print [k for k, v in cnt.iteritems() if v > 1]
# ['A', 'D']
答案 1 :(得分:2)
>>> mylist = ['A','A','B','C','D','E','D']
>>> set([i for i in mylist if mylist.count(i)>1])
set(['A', 'D'])
答案 2 :(得分:1)
import collections
cc = collections.Counter(mylist) # Counter({'A': 2, 'D': 2, 'C': 1, 'B': 1, 'E': 1})
cc.subtract(cc.keys()) # Counter({'A': 1, 'D': 1, 'C': 0, 'B': 0, 'E': 0})
cc += collections.Counter() # remove zeros (trick from the docs)
print cc.keys() # ['A', 'D']
答案 3 :(得分:1)
尝试这样的事情:
a = ['A','A','B','C','D','E','D']
import collections
print [x for x, y in collections.Counter(a).items() if y > 1]
['A', 'D']
参考:How to find duplicate elements in array using for loop in Python?
或强>
def list_has_duplicate_items( mylist ):
return len(mylist) > len(set(mylist))
def get_duplicate_items( mylist ):
return [item for item in set(mylist) if mylist.count(item) > 1]
mylist = [ 'oranges' , 'apples' , 'oranges' , 'grapes' ]
print 'List: ' , mylist
print 'Does list have duplicate item(s)? ' , list_has_duplicate_items( mylist )
print 'Redundant item(s) in list: ' , get_duplicate_items( mylist )
参考https://www.daniweb.com/software-development/python/threads/286996/get-redundant-items-in-list
答案 4 :(得分:1)
在这里使用与其他人相似的方法,继承我的尝试:
from collections import Counter
def return_more_then_one(myList):
counts = Counter(my_list)
out_list = [i for i in counts if counts[i]>1]
return out_list
答案 5 :(得分:0)
它可以像......一样简单。
print(list(set([i for i in mylist if mylist.count(i) > 1])))
答案 6 :(得分:0)
可能不如内部实现快,但需要(几乎)线性时间(因为set
查找是对数的)
mylist = ['A','A','B','C','D','E','D']
myset = set()
dups = set()
for x in mylist:
if x in myset:
dups.add(x)
else:
myset.add(x)
dups = list(dups)
print dups
答案 7 :(得分:0)
另一种解决方案是什么:
def delete_rep(list_):
new_list = []
for i in list_:
if i not in list_[i:]:
new_list.append(i)
return new_list