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
Elinize sağlık sağolun
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]
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])
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.
anladım teşekkür ederim
@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))}"
)