Search for duplicates in the list and work on only one of them

I expanded and added as a new question.

I have a list:

li = [2, 3, 1, 4, 2, 2, 2, 3, 1, 3, 2] 

Then I find out what value is most often found, what value I save in a variable i2:

f = {}
for item in li:
    f[item] = f.get(item, 0) + 1   

for i in f:
    if f[i]==int(max(f.values())):
       i2 = i

Later, all values ​​that are repeated increase by 10, but in addition to the maximum values. This is the code I'm using:

for i in range(len(li)):
    for x in range(i + 1, len(li)):
        if li[i] == li[x] and li[i] != i2:
           li[x] = li[x] + 10

After this operation, I get:

li = [2, 3, 1, 4, 2, 2, 2, 13, 11, 23, 2]

, 2, . , 3 , 3, 3 + 10, 3 + 20. ( 2). ( ), 10 :

li = [2, 3, 1, 4, 2, 12, 22, 13, 11, 23, 2] 

? , li[i] == li[i+1], , , ?

+6
4

collections.Counter, most_common.

li = [2, 3, 1, 4, 2, 2, 2, 3, 1, 3, 2] 
l2 = collections.Counter(li).most_common(1)[0][0]

Counter reset 0, . , 10 , .

running = collections.Counter()
last = None
for i, e in enumerate(li):
    if e == l2 and e != last:
        running[e] = 0
    li[i] = e + 10 * running[e]
    running[e] += 1
    last = e

li [2, 3, 1, 4, 2, 12, 22, 13, 11, 23, 2]

+5

:

import numpy as np
from collections import Counter

li = [2, 3, 1, 4, 2, 2, 2, 3, 1, 3, 2]
#Get most common
i2=Counter(li).most_common()[0][0]

for val in set(li): #loop over all unique values in li
    inds=np.where([i==val for i in li])[0] #get array of indices where li==val
    #special case for i2:
    if val==i2:
        c=1
        for ind in range(1,len(inds)):
            if inds[ind]==inds[ind-1]+1:
                li[inds[ind]]=li[inds[ind]]+10*c
                c+=1
            else:
                c=1
    #not i2:
    else:
        c=1
        for ind in range(1,len(inds)):
            li[inds[ind]]=li[inds[ind]]+10*c
            c+=1

:

print(li)
[2, 3, 1, 4, 2, 12, 22, 13, 11, 23, 2]

:

- i2, , ( ) .

, , li .

, val==i2 c 1, (NB, 1, - val ), , , li, , 1.

( ),

+2

, . :

from collections import Counter


def fix_pivot(my_list, max_el):
    new_list = []
    inc = 0
    for item in my_list:
        if item == max_el:
            new_list.append(item + inc)
            inc += 10
        else:
            new_list.append(item)
            inc = 0
    return new_list

li = [2, 3, 1, 4, 2, 2, 3, 1, 3, 2]

counted_li = Counter(li)
pivot = counted_li.most_common(1)[0][0]

# operating on all elements except for the most frequent, see note 1
temp = {k:[k + 10*(v-i-1) for i in range(v)] for k, v in counted_li.items()}
new = [temp[k].pop() if k != pivot else k for k in li]

# operating on the most frequent element, see note 2
res = fix_pivot(new, pivot)
print(res)  # -> [2, 3, 1, 4, 2, 12, 13, 11, 23, 2] 

:

  • li, (temp), :

    {2: [32, 22, 12, 2], 3: [23, 13, 3], 1: [11, 1], 4: [4]}
    

    [temp[k].pop() if k != pivot else k for k in li], ( , pop ing) ; , .

  • , , ( imo). , , (0 → 10 → 20), , , 0.

+1

, , tobias_k .

from collections import Counter

li = [2, 3, 1, 4, 2, 2, 3, 1, 3, 2]
c = Counter(li)
mc = max(c, key=c.get)

mapper = {k: 0 for k in li}
out = []
for i, v in enumerate(li):
    if v == mc:
        if i > 0 and li[i - 1] == mc:
            mapper[v] += 10
            out.append(v + mapper[v])
        else:
            mapper[v] = 0
            out.append(v)
    else:
        out.append(v + mapper[v])
        mapper[v] += 10

print(out)
>>> [2, 3, 1, 4, 2, 12, 13, 11, 23, 2]
+1

All Articles