O zaman set()'in dışında kalan kodları sildiğimizde aşağıdaki gibi bir çıktı alırdık ve orijinal veriyi elde etmek için bu sefer başka eklemeler yapmak gerekirdi.
find_max = lambda x: set(
filter(
lambda i: i[1] == max([j[1] for j in y]),
(y := [(str(k[0]), x.count(k)) for k in x])
)
)
liste = [
["elma"], ["armut"], ["armut"], ["armut"], ["elma"], ["armut"],
["armut"], ["elma"], ["kiraz"], ["kiraz"], ["kiraz"], ["elma"],
["kiraz"], ["kiraz"], ["üzüm"], ["şeftali"], ["karpuz"], ["elma"]
]
print(find_max(liste))
Çıktı:
('kiraz', 5)
Ben burada orijinal veriyi korumak istedim. Yani çıktı şu şekilde olsun istedim:
tek kelimeleri böyle birden fazla kelime olanlar ise böyle listeleniyor o yüzden yalnızca tek kelimeler üzerinden işlem yapabiliyorum bunu nasıl çözebilirim
Dostum gördüğün gibi farklı koşullara göre farklı algoritmalar geliştirmek lazım. Bu bahsettiğiniz örnekte dışarıdaki listenin içinde en çok geçen elemanı neye göre belirleyeceksiniz? Şöyle anlatmaya çalışayım:
["tek", ["tek"], ["tek", ["ali", "tek"]]]
Şimdi bu yukarıdaki listenin içinde hangi liste elemanının en çok geçtiğini düşündüğümüz zaman kriterimiz ne olacak?
Burada liste içinde en çok geçen eleman diye bir eleman yok aslında. Listenin elemanları şunlar:
Eğer listede en çok geçen elemanı, string ifadeye göre belirleyecekseniz, o zaman liste içindeki listeleri ortadan kaldıran bir fonksiyon yazıp sonra da açığa çıkan string verilerin hangisi listede en çok geçiyorsa onu bulan bir fonksiyonu kullanabilirsiniz.
Örnek:
find_max = lambda x: [
*filter(
lambda i: i, map(
lambda j: (j, y[j]) if y[j] == max(y.values()) else [],
(y := {k: x.count(k) for k in x})
)
)
]
def unnest(x: list = []):
result = []
for i in x:
if isinstance(i, list):
result.extend(unnest(i))
else:
result.append(i)
return result
liste = [[[["tek"], "tek"], ["tek", ["ali", "tek"]]], "tek"]
print(find_max(unnest(liste)))
Çıktı:
[('tek', 5)]
find_max() fonksiyonunun argümanı unnest() fonksiyonu olur, unnest() fonksiyonunun argümanı da iç içe geçmiş listeleriniz olur.
Yukarıdaki unnest() fonksiyonu [[[["tek"], "tek"], ["tek", ["ali", "tek"]]], "tek"] gibi bir veriyi ['tek', 'tek', 'tek', 'ali', 'tek', 'tek'] gibi bir veriye dönüştürür.
Çalışmadı mı? Nasıl bir hatayla karşılaştınız? Sanırım Walrus Operatörü yüzünden çalışmadı. Python sürümünüz 3.8 değilse hata alırsınız. Buradan çözmeye çalışalım, en son çare olarak TeamViewer’a başvururuz.