Get a unique list of items that appear more than once in the list

I have a list of items:

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

      

I want to return a unique list of items that appear more than once in my list, so my desired result is:

 [A,D]

      

Not sure what to do, but my process is to first add the count of each item and then remove everything equal to 1. Then dedup, but this seems like a really roundabout, inefficient way to do it, so I'm looking for advice.

+3


source to share


7 replies


You can use collections.Counter

to do what you described easily:



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

      

+7


source


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

      



+1


source


>>> mylist = ['A','A','B','C','D','E','D']
>>> set([i for i in mylist if mylist.count(i)>1])
set(['A', 'D'])

      

+1


source


Try the following:

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

      

Ref: How to find duplicate elements in an array using for loop in Python?

OR

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 )

      

Link https://www.daniweb.com/software-development/python/threads/286996/get-redundant-items-in-list

+1


source


Using a similar approach to others, here's my attempt:

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

      

0


source


It can be as easy as ...

print(list(set([i for i in mylist if mylist.count(i) > 1])))

      

0


source


Maybe not as fast as internal implementations, but takes (almost) linear time (since the set

search is logarithmic)

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

      

0


source







All Articles