from collections import Counter
from random import randrange
from timeit import repeat
from itertools import chain

def rearrange_list4(inp_list):
    uniques = set(inp_list)
    return list(chain(uniques, (Counter(inp_list) - Counter(uniques)).elements()))

def just_set(inp_list):
    uniques = set(inp_list)
    
def just_ctr(inp_list):
    Counter(inp_list)
    
def just_ctr2(inp_list):
    Counter(uniques)
    
def just_sub(inp_list):
    ctr - subtract

def finish(inp_list):
    list(chain(uniques, diff.elements()))

funcs = rearrange_list4, just_set, just_ctr, just_ctr2, just_sub, finish

a = [randrange(10000) for _ in range(30000)]
uniques = set(a)
ctr = Counter(a)
subtract = Counter(uniques)
diff = ctr - subtract

for _ in range(3):
    print()
    for func in funcs:
        t = min(repeat(lambda: func(a), number=1))
        print('%5.2f ms ' % (t * 1e3), func.__name__)