दिलचस्प पोस्ट
पायथन में ज़िप सूचियां यदि बयान के साथ सूची की समझ ब्लॉक का उपयोग करके सी # क्या है और मुझे इसका उपयोग क्यों करना चाहिए? डायरेक्टरी में फाइल के लिए पुनरावर्ती रूप से खोजना आईफोन के फोटो लाइब्रेरी में मेटाडाटा (एक्सआईफ़, जीपीएस, टीआईएफएफ) के साथ यूआईमेज लिखें स्क्रिप्ट टैग पर ओनलोड इवेंट को आग लगाने की कोशिश कर रहा है didSelectRowAtIndexPath: नहीं बुलाया जा रहा है जेएसएफ 2.0 ब्राउज़र और प्रोग्रामेम से पूरे सत्र में सेट करें तत्व को किसी अन्य तत्व में कैसे स्थानांतरित करना है? अंडाकार को स्थानांतरित करने के लिए बोर्ड-ड्राइंग कोड सी में "कॉलबैक" क्या है और उनका कार्यान्वयन कैसे किया जाता है? फ़ोल्डर में सभी फ़ाइलों की सूची और उप फ़ोल्डर्स नाम इस संदर्भ में बाध्य नहीं है SQL सर्वर ऑपरेटिंग सिस्टम त्रुटि 5: "5 (प्रवेश निषेध है।)" क्या मेमोरी रिसाव बनाया जाता है यदि .Net में MemoryStream बंद नहीं होता है?

अजगर में आइटम आवृत्ति गणना

मैं एक अजगर नौसिखिया हूँ, इसलिए शायद मेरा प्रश्न बहुत नबो है। मान लें कि मेरे पास शब्दों की एक सूची है, और मैं उस सूची में प्रत्येक शब्द बार की संख्या को ढूँढ़ना चाहता हूं। यह करने का स्पष्ट तरीका है:

words = "apple banana apple strawberry banana lemon" uniques = set(words.split()) freqs = [(item, words.split.count(item)) for item in uniques] print(freqs) 

लेकिन मुझे यह कोड बहुत अच्छा नहीं मिल रहा है, क्योंकि इस तरह से कार्यक्रम दो बार शब्द सूची के माध्यम से चलाता है, एक बार सेट का निर्माण करने के लिए, और दूसरी बार दिखावे की संख्या की गणना करते समय बेशक, मैं सूची के माध्यम से चलाने और गिनती करने के लिए एक फ़ंक्शन लिख सकता हूं, लेकिन यह इतना अजगर नहीं होगा तो, क्या कोई और अधिक कुशल और अजगर तरीका है?

Solutions Collecting From Web of "अजगर में आइटम आवृत्ति गणना"

बचाव के लिए डिफ़ॉल्ट !

 from collections import defaultdict words = "apple banana apple strawberry banana lemon" d = defaultdict(int) for word in words.split(): d[word] += 1 

यह ओ (एन) में चलता है

यदि आप अजगर 2.7 + / 3.1 + का उपयोग कर रहे हैं, तो संग्रह मॉड्यूल में एक काउंटर क्लास है जो कि इस प्रकार की समस्या को हल करने के लिए बनाया गया उद्देश्य है:

 >>> from collections import Counter >>> words = "apple banana apple strawberry banana lemon" >>> freqs = Counter(words.split()) >>> print(freqs) Counter({'apple': 2, 'banana': 2, 'strawberry': 1, 'lemon': 1}) >>> 

चूंकि 2.7 और 3.1 दोनों अभी भी बीटा में हैं, इसलिए यह संभव नहीं है कि आप इसका उपयोग कर रहे हैं, इसलिए बस इस बात को ध्यान में रखें कि इस तरह का काम करने का एक मानक तरीका जल्द ही उपलब्ध होगा

मानक दृष्टिकोण:

 from collections import defaultdict words = "apple banana apple strawberry banana lemon" words = words.split() result = collections.defaultdict(int) for word in words: result[word] += 1 print result 

समूह द्वारा संचालित:

 from itertools import groupby words = "apple banana apple strawberry banana lemon" words = words.split() result = dict((key, len(list(group))) for key, group in groupby(sorted(words))) print result 

यदि आप मानक शब्दकोश विधि का उपयोग नहीं करना चाहते हैं (उचित dict कुंजी को बढ़ाकर सूची के माध्यम से पाशन), तो आप यह कोशिश कर सकते हैं:

 >>> from itertools import groupby >>> myList = words.split() # ['apple', 'banana', 'apple', 'strawberry', 'banana', 'lemon'] >>> [(k, len(list(g))) for k, g in groupby(sorted(myList))] [('apple', 2), ('banana', 2), ('lemon', 1), ('strawberry', 1)] 

यह ओ (एन लॉग एन) समय में चलता है

 freqs = {} for word in words: freqs[word] = freqs.get(word, 0) + 1 # fetch and increment OR initialize 

मुझे लगता है कि इसका परिणाम ट्रिप्टिक के समाधान के समान होता है, लेकिन संग्रह आयात किए बिना। Selinap के समाधान की तरह थोड़ा सा, लेकिन अधिक पठनीय imho लगभग थॉमस वीगल के समाधान के समान, लेकिन अपवादों का उपयोग किए बिना।

यह संग्रह लाइब्रेरी से डिफ़ॉल्टdict () उपयोग करने से धीमी हो सकती है। चूंकि मान लाया जाता है, वृद्धि हुई है और फिर दोबारा असाइन किया गया है। बस बढ़े हुए के बजाय हालांकि + = का प्रयोग केवल आंतरिक रूप से एक ही हो सकता है

डिफ़ॉल्ट के बिना:

 words = "apple banana apple strawberry banana lemon" my_count = {} for word in words.split(): try: my_count[word] += 1 except KeyError: my_count[word] = 1 

क्या आप बस गिनती का उपयोग नहीं कर सकते हैं?

 words = 'the quick brown fox jumps over the lazy gray dog' words.count('z') #output: 1 

नीचे दिए गए उत्तर में कुछ अतिरिक्त चक्र हैं, लेकिन यह एक और तरीका है

 def func(tup): return tup[-1] def print_words(filename): f = open("small.txt",'r') whole_content = (f.read()).lower() print whole_content list_content = whole_content.split() dict = {} for one_word in list_content: dict[one_word] = 0 for one_word in list_content: dict[one_word] += 1 print dict.items() print sorted(dict.items(),key=func) 

मुझे कुछ स्पार्क व्यायाम पर काम करना पड़ा, यहाँ मेरा समाधान है

 tokens = ['quick', 'brown', 'fox', 'jumps', 'lazy', 'dog'] print {n: float(tokens.count(n))/float(len(tokens)) for n in tokens} 

** उपरोक्त ** का उत्पादन

 {'brown': 0.16666666666666666, 'lazy': 0.16666666666666666, 'jumps': 0.16666666666666666, 'fox': 0.16666666666666666, 'dog': 0.16666666666666666, 'quick': 0.16666666666666666} 

सूची को एक एकल शब्दकोश में परिवर्तित करने के लिए () कम करें का उपयोग करें

 words = "apple banana apple strawberry banana lemon" reduce( lambda d, c: d.update([(c, d.get(c,0)+1)]) or d, words.split(), {}) 

रिटर्न

 {'strawberry': 1, 'lemon': 1, 'apple': 2, 'banana': 2} 
 words = "apple banana apple strawberry banana lemon" w=words.split() e=list(set(w)) for i in e: print(w.count(i)) #Prints frequency of every word in the list 

उम्मीद है की यह मदद करेगा!