Listedeki Elemanı Frekansa ve Giriş Sırasına Göre Sıralama

Merhaba kodun amacı gönderilen listeyi öncelikle bir değerin tekrar edilmesine göre sıralamak, daha sonra ise listedeki geliş sırasına göre sıralamak.
[4, 6, 2, 2, 6, 4, 4, 4] şeklinde bir liste gönderdiğimde 4,4,4,4,6,6,2,2 çıktısını almak istiyorum.
[4, 2, 6, 6, 2, 4, 4, 4] şeklinde bir liste gönderdiğimde ise 4,4,4,4,2,2,6,6 gibi bir çıktı almak istiyorum fakat başaramadım.
Yazdığım kod şu şekilde;

def frequency_sort(li):
    yeni = []
    for i in li:
        if (yeni.count((i,li.count(i))) < 1):
            yeni.append((i,li.count(i)))
            
    son = []
    for i,j in yeni:
        while j > 0:
            son.append(i)
            j-=1
        
    return son
frequency_sort([2,2,2,3,1,2,4,1])

Benim yazdığım koddaki çıktı ise şu şekilde oluyor: (2,2,2,2,3,1,1,4)
Doğru çıktı: (2,2,2,2,1,1,3,4 ) olmalıydı

Özetle listedeki elemanları önce listede tekrar etmesine, sonra listedeki sırasına göre sıralamak istiyorum ancak Counter modülünü kullanmak istemiyorum bu şekilde döngülerle yapmak istiyorum.

Merhaba, aşağıdaki kodları bir inceleyin isterseniz.

def f(arg):
    result = []
    counts = {i: arg.count(i) for i in arg}    
    while counts:
        for key, values in counts.items():
            if values == max(counts.values()):
                result.extend([key for i in range(values)])
                counts.pop(key)
                break
    return result

Denemeler:

print(f([4, 6, 2, 2, 6, 4, 4, 4]))
# [4, 4, 4, 4, 6, 6, 2, 2]

print(f([4, 2, 6, 6, 2, 4, 4, 4]))
# [4, 4, 4, 4, 2, 2, 6, 6]

print(f([1, 2, 2, 3, 2, 2, 4, 1]))
# [2, 2, 2, 2, 1, 1, 3, 4]
1 Beğeni

Teşekkürler :slightly_smiling_face:

1 Beğeni

Rica ederim, kolay gelsin.