Search code examples
pythonlistno-duplicates

Duplicates counting with order order preserving in Python lists


suppose the list

[7,7,7,7,3,1,5,5,1,4]

I would like to remove duplicates and get them counted while preserving the order of the list. To preserve the order of the list removing duplicates i use the function

def unique(seq, idfun=None):
   # order preserving
   if idfun is None:
       def idfun(x): return x
   seen = {}
   result = []
   for item in seq:
       marker = idfun(item)
       if marker in seen: continue
       seen[marker] = 1
       result.append(item)
   return result

that is giving to me the output

[7,3,1,5,1,4]

but the desired output i want would be (in the final list could exists) is:

[7,3,3,1,5,2,4]

7 is written because it's the first item in the list, then the following is checked if it's the different from the previous. If the answer is yes count the occurrences of the same item until a new one is found. Then repeat the procedure. Anyone more skilled than me that could give me a hint in order to get the desired output listed above? Thank you in advance


Solution

  • Try this

    import collections as c
    lst = [7,7,7,7,3,1,5,5,1,4]
    result = c.OrderedDict()
    for el in lst:
        if el not in result.keys():
            result[el] = 1
        else:
            result[el] = result[el] + 1
    
    print result
    

    prints out: OrderedDict([(7, 4), (3, 1), (1, 2), (5, 2), (4, 1)])

    It gives a dictionary though. For a list, use:

    lstresult = []
    for el in result:
        # print k, v
        lstresult.append(el)
        if result[el] > 1:
            lstresult.append(result[el] - 1)
    

    It doesn't match your desired output but your desired output also seems like kind of a mangling of what is trying to be represented