Bu ana konuyla ilgili Python golf için bir ipucu sorudur.
Python'daki bir listenin en yaygın unsurlarını mümkün olan en kısa şekilde elde etmenin en kısa yolunu arıyorum. İşte denedim, listenin adında bir değişken olduğunu varsayarsak l
:
from statistics import*
mode(l)
Birden fazla mod varsa bu bir hata atar.
max(l,key=l.count)
Bu sadece 1 öğe döndürür , en büyük sayımın tüm öğelerini almam gerekiyor .
from collections import*
Counter(l).most_common()
Bu (element, count)
, sayılarına göre sıralanmış bir tuples listesi döndürür . Bundan, karşılık gelen sayısı ilkine eşit olan tüm öğeleri çekebilirim, ancak bundan daha iyi bir golf yolu göremiyorum:
from collections import*
c=Counter(l).most_common()
[s for s,i in c if i==c[0][1]]
Eminim daha kısa bir yol var!
Ayrıca, değişken ataması veya çoklu kullanımları olmadan yapılabilirse l
, daha fazla bayt kaydetmek için kodun geri kalanını lambda ifadesi olarak tutabilirim.
Düzenleme: Per @ Uriel'in önerisine göre şunları yapabiliriz:
{s for s in l if l.count(s)==l.count(max(l,key=l.count))}
Ve list.count
birkaç bayt için takma ad yapabilirim :
c=l.count;{s for s in l if c(s)==c(max(l,key=c))}
@ Uriel, birkaç bayt daha alabileceğimize dikkat çekti map
:
c=l.count;{s for s in l if c(s)==max(map(c,l))}