यह पायथन में गोल्फ के लिए एक टिप्स सवाल है, जो मुख्य विषय पर है।
मैं सबसे कम संभव तरीके से पायथन में एक सूची के सबसे आम तत्वों को प्राप्त करने के लिए सबसे छोटे तरीके की तलाश कर रहा हूं। यहाँ मैंने जो कोशिश की है, यह मानते हुए कि सूची एक चर में है l
:
from statistics import*
mode(l)
यदि कई मोड हैं, तो यह एक त्रुटि फेंकता है।
max(l,key=l.count)
यह केवल 1 आइटम देता है, मुझे सबसे बड़ी गणना के सभी तत्वों को प्राप्त करने की आवश्यकता है ।
from collections import*
Counter(l).most_common()
यह (element, count)
गिनती के आधार पर tuples की सूची देता है । इससे मैं उन सभी तत्वों को खींच सकता हूँ जिनकी संख्या पहले के बराबर है, लेकिन मुझे इससे बेहतर गोल्फ का कोई रास्ता नहीं दिखता है:
from collections import*
c=Counter(l).most_common()
[s for s,i in c if i==c[0][1]]
मुझे यकीन है कि एक छोटा रास्ता है!
इसके अलावा, अगर यह चर असाइनमेंट या कई उपयोगों के बिना किया जा सकता है l
, तो मैं अधिक बाइट्स को बचाने के लिए बाकी कोड को लंबोदर अभिव्यक्ति के रूप में रख सकता हूं।
संपादित करें: प्रति @ उरीएल के सुझाव के अनुसार, हम कर सकते हैं:
{s for s in l if l.count(s)==l.count(max(l,key=l.count))}
और मैं list.count
कुछ बाइट्स के लिए उपनाम कर सकता हूं :
c=l.count;{s for s in l if c(s)==c(max(l,key=c))}
@ यूरिल ने बताया कि हम कुछ और बाइट ले सकते हैं map
:
c=l.count;{s for s in l if c(s)==max(map(c,l))}