Listede en fazla tekrar eden elemanı silen program?

Merhabalar bilgisayar mühendisliği 1. sınıfım listede en fazla tekrar eden elemanı silen programı fonksyonlar yardımı ile kolay bir şekilde çözer misiniz?

Merhabalar.
Python’da pek fazla liste metodu olmadığı için şöyle bir çözüm gerektiriyor:

def uniq(list):
    new_list = []
    for i in list:
        if new_list.count(i) == 0:
            new_list.append(i)
    return new_list

def karakter_silme(list):
    en_fazla_tekrar_eden_kelime = ""
    tekrar_sayısı = 0
    for i in uniq(list):
        if list.count(i) > tekrar_sayısı:
            tekrar_sayısı = list.count(i)
            en_fazla_tekrar_eden_kelime = i
    for i in list:
        if str(i) == en_fazla_tekrar_eden_kelime:
            list.remove(i)
    return list
1 Beğeni

Elinize sağlık sağolun

1 Beğeni
def f(x):
    return [i for i in x if not x.count(i) == max({x.count(k): k for k in x})]


print(f([1, 1, 2, 3, 1, 1]))
# [2, 3]
2 Beğeni
f = lambda xs: (lambda rm: list(filter(lambda n: n != rm, xs)))(sorted(functools.reduce(lambda c, x: c | {x: c.get(x, 0) + 1}, xs, {}).items(), key=lambda i_c: i_c[1])[-1][0])
2 Beğeni

merhaba kodunuzu inceliyordum ama newlistin ne için kullanıldığını ve ilk fonksiyonun ne işe yaradığını anlayamadım.Açıklayabilir misiniz ?

new_list yeni kopyası bulunmayan elemanların eklendiği listedir.

İlk fonksiyon, bir listede tekrar eden fazla elemanları silip tekrar etmeyen elemanlara sahip olan yeni bir liste oluşturuyor. Sonra diğer fonksiyon ile bu listeleri karşılaştırıp en fazla tekrar eden elemanı siliyoruz.

1 Beğeni

anladım teşekkür ederim

1 Beğeni

@sonsuz 'un yukardaki mesajımı beğenme bildirimi gelince fark ettim.

Bu mesajda önerdiğim ifadede işlem yükü oluşturan bir kısım var.

[i for i in x if not x.count(i) == max({x.count(k): k for k in x})]

Yukardaki ifadede, her bir i adımı için tekrar tekrar {x.count(k): k for k in x} sözlüğü oluşturuluyor; oysa bir kez bu sözlüğü oluşturup, her adımda onu kullanmamız daha doğru bir yaklaşım olurdu.

Bu f fonksiyonu ile aşağıdaki g fonksiyonunun çalışma zamanlarını karşılaştırırsak, g fonksiyonunun çalışma zamanının daha kısa olduğunu gözlemleriz.

import timeit


def f(x):
    return [i for i in x if not x.count(i) == max({x.count(k): k for k in x})]


def g(x):
    return [i for i in x if not x.count(i) == max(d)] if (d := {x.count(k): k for k in x}) else None


test = [1, 1, 2, 3, 1, 1]
print(
    f"t1 = {timeit.timeit(lambda: f(test))}\n",
    f"t2 = {timeit.timeit(lambda: g(test))}"
)