पायथन में एक सूची के सबसे आम तत्व


13

यह पायथन में गोल्फ के लिए एक टिप्स सवाल है, जो मुख्य विषय पर है।

मैं सबसे कम संभव तरीके से पायथन में एक सूची के सबसे आम तत्वों को प्राप्त करने के लिए सबसे छोटे तरीके की तलाश कर रहा हूं। यहाँ मैंने जो कोशिश की है, यह मानते हुए कि सूची एक चर में है 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))}

संबंधित , लेकिन वह नहीं करता है जो मुझे चाहिए
Musicman523

जवाबों:


5

इसके बारे में क्या खयाल है?

c=l.count;{x for x in l if c(x)==max(map(c,l))}

[*...]सूची प्राप्त करने के लिए संलग्न करें ।


ओह ठीक है, मुझे एक अनूठी सूची या सेट की आवश्यकता है, धन्यवाद
संगीतज्ञ ५२३

@ musicman523 आपने क्यों अपडेट किया l.count(max(l,key=l.count))? max(map(l.count,l))कम है
यूरिल

आह, मैं उस एक के बारे में नहीं सोचा था, धन्यवाद!
संगीतज्ञ ५२३
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.