[Python] एक सूची आइटम की घटनाओं की गणना कैसे करें?


Answers

यदि आप पायथन 2.7 या 3 का उपयोग कर रहे हैं और आप प्रत्येक तत्व के लिए घटनाओं की संख्या चाहते हैं:

>>> from collections import Counter
>>> z = ['blue', 'red', 'blue', 'yellow', 'blue', 'red']
>>> Counter(z)
Counter({'blue': 3, 'red': 2, 'yellow': 1})
Question

किसी आइटम को देखते हुए, मैं पाइथन में एक सूची में अपनी घटनाओं को कैसे गिन सकता हूं?




पांडों का उपयोग क्यों नहीं करते?

import pandas as pd

l = ['a', 'b', 'c', 'd', 'a', 'd', 'a']

# converting the list to a Series and counting the values
my_count = pd.Series(l).value_counts()
my_count

आउटपुट:

a    3
d    2
b    1
c    1
dtype: int64

यदि आप किसी विशेष तत्व की गिनती की तलाश में हैं, तो कहें, कोशिश करें:

my_count['a']

आउटपुट:

3



एक शब्दकोश में, प्रत्येक आइटम की घटनाओं की संख्या प्राप्त करने का एक और तरीका:

dict((i, a.count(i)) for i in a)



यदि आप एक बार में सभी मानों को गिनना चाहते हैं तो आप निम्नानुसार numpy arrays और bincount का उपयोग करके इसे बहुत तेज़ कर सकते हैं

import numpy as np
a = np.array([1, 2, 3, 4, 1, 4, 1])
np.bincount(a)

जो देता है

>>> array([0, 3, 1, 1, 2])



इससे पहले कि मैंने एसओ जांचने से पहले मुझे यह समस्या थी और अपना खुद का समाधान लुढ़का। इस:

dict((i,a.count(i)) for i in a)

वास्तव में, बड़ी सूचियों के लिए वास्तव में धीमी है। मेरा समाधान

def occurDict(items):
    d = {}
    for i in items:
        if i in d:
            d[i] = d[i]+1
        else:
            d[i] = 1
return d

कम से कम पाइथन 2.7 के लिए काउंटर समाधान से थोड़ा तेज़ है।




sum([1 for elem in <yourlist> if elem==<your_value>])

यह आपके_value के अवसरों की मात्रा वापस कर देगा




from collections import Counter
country=['Uruguay', 'Mexico', 'Uruguay', 'France', 'Mexico']
count_country = Counter(country)
output_list= [] 

for i in count_country:
    output_list.append([i,count_country[i]])
print output_list

आउटपुट सूची:

[['Mexico', 2], ['France', 1], ['Uruguay', 2]]



एक सामान्य प्रकार वाले विविध तत्वों की संख्या को गिनने के लिए:

li = ['A0','c5','A8','A2','A5','c2','A3','A9']

print sum(1 for el in li if el[0]=='A' and el[1] in '01234')

देता है

3 , 6 नहीं






Links