获取列表中多次出现的项目的唯一列表

时间:2014-11-06 06:27:52

标签: python python-2.7

我有一个项目列表:

mylist = ['A','A','B','C','D','E','D']

我想返回一个在mylist中出现多次的唯一项目列表,以便我所需的输出为:

 [A,D]

不确定如何成为这个,但我的过程是首先追加每个项目的计数,然后删除等于1的任何内容。然后重复数据删除,但这似乎是一个非常迂回,低效的方法,所以我正在寻求建议。

8 个答案:

答案 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