পাইথনের কাউন্টার সহ একটি তালিকায় প্রতিটি উপাদানের সংঘটনের সংখ্যা গণনা করা হচ্ছে

ব্যবসায়

পাইথনে, বিল্ট-ইন ফাংশন len() ব্যবহার করে একটি তালিকা বা টিপলের সমস্ত উপাদানের সংখ্যা প্রাপ্ত করা যেতে পারে, এবং প্রতিটি উপাদানের সংখ্যা (প্রতিটি উপাদানের সংঘটনের সংখ্যা) গণনা() পদ্ধতি ব্যবহার করে প্রাপ্ত করা যেতে পারে। .

উপরন্তু, পাইথন স্ট্যান্ডার্ড লাইব্রেরি সংগ্রহের কাউন্টার ক্লাসটি ঘটনার সংখ্যার ক্রমানুসারে উপাদানগুলি পেতে ব্যবহার করা যেতে পারে।

এই বিভাগে, আমরা নিম্নলিখিত আলোচনা করব

  • উপাদানের মোট সংখ্যা গণনা করুন:len()
  • প্রতিটি উপাদানের সংখ্যা গণনা করুন (প্রতিটি উপাদানের সংঘটনের সংখ্যা):count()
  • ব্যবহার।collections.Counter
  • উপাদানগুলি সংঘটনের ফ্রিকোয়েন্সি অনুসারে পুনরুদ্ধার করা হয়:most_common()
  • অ-ওভারল্যাপিং উপাদানের (অনন্য উপাদান) সংখ্যা (প্রকার) গণনা করুন।
  • শর্ত পূরণ করে এমন উপাদানের সংখ্যা গণনা করুন।

উপরন্তু, একটি কংক্রিট উদাহরণ হিসাবে, নিম্নলিখিত নমুনা কোড সঙ্গে ব্যাখ্যা করা হয়.

  • একটি স্ট্রিং-এ একটি শব্দের উপস্থিতির সংখ্যা গণনা করে।
  • একটি স্ট্রিং মধ্যে একটি অক্ষর সংঘটন সংখ্যা গণনা.

নমুনা একটি তালিকা, কিন্তু একই প্রক্রিয়াকরণ tuples সঙ্গে করা যেতে পারে.

উপাদানের মোট সংখ্যা গণনা করুন: len()

একটি তালিকা বা টিপলে উপাদানের মোট সংখ্যা গণনা করতে, বিল্ট-ইন ফাংশন len() ব্যবহার করুন।

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

print(len(l))
# 7

প্রতিটি উপাদানের সংখ্যা গণনা (প্রতিটি উপাদানের সংঘটনের সংখ্যা): গণনা() পদ্ধতি

প্রতিটি উপাদানের সংখ্যা গণনা করতে (প্রতিটি উপাদানের সংঘটনের সংখ্যা), তালিকা, টিপলস ইত্যাদির জন্য count() পদ্ধতি ব্যবহার করুন।

যদি একটি মান যা একটি উপাদান হিসাবে বিদ্যমান নেই একটি যুক্তি হিসাবে পাস করা হয়, 0 প্রদান করা হয়.

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

print(l.count('a'))
# 4

print(l.count('b'))
# 1

print(l.count('c'))
# 2

print(l.count('d'))
# 0

আপনি যদি একবারে প্রতিটি উপাদানের সংঘটনের সংখ্যা পেতে চান তবে নিম্নলিখিত সংগ্রহ। কাউন্টারটি দরকারী।

কালেকশনস কাউন্টার কিভাবে ব্যবহার করবেন

পাইথন স্ট্যান্ডার্ড লাইব্রেরি সংগ্রহে একটি কাউন্টার ক্লাস রয়েছে।

কাউন্টার() হল ডিকশনারি টাইপ ডিক্টের একটি সাবক্লাস, যেটিতে কী হিসাবে উপাদানের আকারে ডেটা এবং মান হিসাবে উপস্থিতি রয়েছে।

import collections

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

c = collections.Counter(l)
print(c)
# Counter({'a': 4, 'c': 2, 'b': 1})

print(type(c))
# <class 'collections.Counter'>

print(issubclass(type(c), dict))
# True

যদি একটি উপাদান একটি কী হিসাবে নির্দিষ্ট করা হয়, উপাদান সংখ্যা প্রাপ্ত করা যেতে পারে. যদি একটি মান যা একটি উপাদান হিসাবে বিদ্যমান নেই তা নির্দিষ্ট করা হয়, 0 প্রদান করা হয়।

print(c['a'])
# 4

print(c['b'])
# 1

print(c['c'])
# 2

print(c['d'])
# 0

এছাড়াও আপনি অভিধান প্রকার পদ্ধতি যেমন কী(), মান(), আইটেম(), ইত্যাদি ব্যবহার করতে পারেন।

print(c.keys())
# dict_keys(['a', 'b', 'c'])

print(c.values())
# dict_values([4, 1, 2])

print(c.items())
# dict_items([('a', 4), ('b', 1), ('c', 2)])

এই পদ্ধতিগুলি dict_keys ইত্যাদি টাইপের অবজেক্টগুলি প্রদান করে৷ আপনি স্টেটমেন্টের জন্য একটি চালাতে চাইলে সেগুলি ব্যবহার করা যেতে পারে৷ আপনি যদি এটিকে একটি তালিকায় রূপান্তর করতে চান তবে তালিকা () ব্যবহার করুন।

উপস্থিতির ফ্রিকোয়েন্সি অনুসারে উপাদানগুলি প্রাপ্ত করা: most_common() পদ্ধতি

কাউন্টারে most_common() পদ্ধতি রয়েছে, যা সংঘটনের সংখ্যা অনুসারে সাজানো ফর্মের টিপলের একটি তালিকা (উপাদান, সংঘটনের সংখ্যা) প্রদান করে।

print(c.most_common())
# [('a', 4), ('c', 2), ('b', 1)]

সর্বাধিক সংখ্যক সংঘটনের উপাদানটি একটি সূচক নির্দিষ্ট করে প্রাপ্ত করা যেতে পারে, যেমন সর্বাধিক সংখ্যক ঘটনার জন্য [0] এবং সর্বনিম্ন সংঘটনের জন্য [-1]। আপনি যদি শুধুমাত্র উপাদান বা শুধুমাত্র সংঘটন সংখ্যা পেতে চান, আপনি আরও সূচক নির্দিষ্ট করতে পারেন.

print(c.most_common()[0])
# ('a', 4)

print(c.most_common()[-1])
# ('b', 1)

print(c.most_common()[0][0])
# a

print(c.most_common()[0][1])
# 4

আপনি যদি সংঘটনের সংখ্যা হ্রাস করার জন্য সেগুলিকে সাজাতে চান তবে স্লাইসটি -1-এ সেট করা বৃদ্ধি সহ ব্যবহার করুন।

print(c.most_common()[::-1])
# [('b', 1), ('c', 2), ('a', 4)]

আর্গুমেন্ট n যদি most_common() মেথডের জন্য নির্দিষ্ট করা হয়, তাহলে শুধুমাত্র n এলিমেন্টগুলিই ফেরত দেওয়া হয় যেখানে সর্বাধিক সংখ্যক ঘটনা ঘটে। এটা বাদ দেওয়া হলে, সব উপাদান.

print(c.most_common(2))
# [('a', 4), ('c', 2)]

আপনি যদি (উপাদান, সংঘটনের সংখ্যা) সংখ্যার পরিবর্তে সংঘটনের সংখ্যা অনুসারে উপাদান/সংঘটনের একটি পৃথক তালিকা চান তবে আপনি এটিকে নিম্নরূপ পচন করতে পারেন

values, counts = zip(*c.most_common())

print(values)
# ('a', 'c', 'b')

print(counts)
# (4, 2, 1)

অন্তর্নির্মিত ফাংশন zip() একটি দ্বি-মাত্রিক তালিকা স্থানান্তর করতে ব্যবহার করা হয় (এই ক্ষেত্রে, টিপলের একটি তালিকা), এবং তারপর এটিকে আনপ্যাক করে বের করে।

অ-ওভারল্যাপিং উপাদানের (অনন্য উপাদান) সংখ্যা (প্রকার) গণনা করুন।

একটি তালিকা বা টিপলে কতগুলি নন-ওভারল্যাপিং উপাদান (অনন্য উপাদান) রয়েছে (কত প্রকার রয়েছে) তা গণনা করতে, উপরে বর্ণিত হিসাবে কাউন্টার বা সেট() ব্যবহার করুন।

কাউন্টার অবজেক্টের উপাদানের সংখ্যা মূল তালিকার অ-ওভারল্যাপিং উপাদানগুলির সংখ্যার সমান, যা len() দিয়ে পাওয়া যেতে পারে।

l = ['a', 'a', 'a', 'a', 'b', 'c', 'c']
c = collections.Counter(l)

print(len(c))
# 3

আপনি সেট(), সেট টাইপ সেটের জন্য কনস্ট্রাক্টরও ব্যবহার করতে পারেন, যা আপনার কাউন্টার অবজেক্টের প্রয়োজন না হলে সহজ।

সেট টাইপ হল একটি ডেটা টাইপ যাতে ডুপ্লিকেট উপাদান থাকে না। সেট()-এ একটি তালিকা পাস করা ডুপ্লিকেট মানগুলিকে উপেক্ষা করে এবং উপাদান হিসাবে শুধুমাত্র অনন্য মান সহ সেটের একটি বস্তু প্রদান করে। এই ধরনের উপাদানের সংখ্যা len() দ্বারা প্রাপ্ত হয়।

print(set(l))
# {'a', 'c', 'b'}

print(len(set(l)))
# 3

শর্ত পূরণ করে এমন উপাদানের সংখ্যা গণনা করুন।

একটি তালিকা বা টিপলে উপাদানের সংখ্যা গণনা করতে যা একটি নির্দিষ্ট শর্ত পূরণ করে, তালিকা বোঝার স্বরলিপি বা জেনারেটর এক্সপ্রেশন ব্যবহার করুন।

উদাহরণ হিসাবে, নিম্নলিখিত সংখ্যার তালিকার জন্য নেতিবাচক মান সহ উপাদানগুলির সংখ্যা গণনা করুন

l = list(range(-5, 6))
print(l)
# [-5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5]

তালিকা বোঝার স্বরলিপিতে প্রতিটি উপাদানে একটি শর্তসাপেক্ষ অভিব্যক্তি প্রয়োগ করলে একটি তালিকা পাওয়া যায় যার উপাদানগুলি হল বুলিয়ান বুল (সত্য, মিথ্যা)। বুলিয়ান টাইপ বুল হল পূর্ণসংখ্যা টাইপের int-এর একটি সাবক্লাস, যেখানে সত্যকে 1 এবং মিথ্যাকে 0 হিসাবে গণ্য করা হয়। তাই, সঠিক মানগুলির সংখ্যা (শর্তটি পূরণ করে এমন উপাদানের সংখ্যা) যোগফল ব্যবহার করে যোগফল গণনা করে গণনা করা যেতে পারে। ()।

print([i < 0 for i in l])
# [True, True, True, True, True, False, False, False, False, False, False]

print(sum([i < 0 for i in l]))
# 5

যদি আমরা লিস্ট কম্প্রিহেনশন নোটেশনে [] প্রতিস্থাপন করি (), তাহলে আমরা একটি জেনারেটর এক্সপ্রেশন পাব। তালিকা বোঝার স্বরলিপি প্রক্রিয়াকৃত সমস্ত উপাদানগুলির একটি তালিকা তৈরি করে, যখন জেনারেটর এক্সপ্রেশন উপাদানগুলিকে ক্রমানুসারে প্রক্রিয়া করে এবং তাই এটি আরও মেমরি দক্ষ।

যখন জেনারেটর এক্সপ্রেশনটি একমাত্র যুক্তি, () বাদ দেওয়া যেতে পারে, তাই এটি পরবর্তী ক্ষেত্রে হিসাবে লেখা যেতে পারে।

print(sum((i < 0 for i in l)))
# 5

print(sum(i < 0 for i in l))
# 5

আপনি যদি মিথ্যা মানের সংখ্যা গণনা করতে চান (অবস্থা পূরণ করে না এমন উপাদানের সংখ্যা), ব্যবহার করবেন না। উল্লেখ্য যে > এর চেয়ে বেশি অগ্রাধিকার রয়েছে (এটি প্রথমে গণনা করা হয়), তাই নিম্নলিখিত উদাহরণে (i < 0) বন্ধনী () আবশ্যক নয়।

print([not (i < 0) for i in l])
# [False, False, False, False, False, True, True, True, True, True, True]

print(sum(not (i < 0) for i in l))
# 6

অবশ্যই, শর্তগুলি নিজেরাই পরিবর্তন করা যেতে পারে।

print(sum(i >= 0 for i in l))
# 6

কিছু অন্যান্য উদাহরণ নীচে দেখানো হয়েছে.

সংখ্যার তালিকার জন্য বিজোড় উপাদানের সংখ্যা পাওয়ার উদাহরণ।

print([i % 2 == 1 for i in l])
# [True, False, True, False, True, False, True, False, True, False, True]

print(sum(i % 2 == 1 for i in l))
# 6

স্ট্রিংগুলির একটি তালিকার জন্য একটি শর্তের উদাহরণ৷

l = ['apple', 'orange', 'banana']

print([s.endswith('e') for s in l])
# [True, True, False]

print(sum(s.endswith('e') for s in l))
# 2

ঘটনার সংখ্যার উপর ভিত্তি করে গণনা করতে কাউন্টার ব্যবহার করা হয়। items() একটি টুপল (উপাদান, ঘটনার সংখ্যা) পুনরুদ্ধার করে এবং সংঘটনের সংখ্যা শর্তটি নির্দিষ্ট করে।

নিম্নলিখিত দুটি বা ততোধিক সংঘটন সহ উপাদান নিষ্কাশন এবং ঘটনার মোট সংখ্যা গণনা করার একটি উদাহরণ। এই উদাহরণে, মোট ছয়টির জন্য চারটি a এবং দুটি c আছে।

l = ['a', 'a', 'a', 'a', 'b', 'c', 'c']
c = collections.Counter(l)

print(c.items())
# dict_items([('a', 4), ('b', 1), ('c', 2)])

print([i for i in l if c[i] >= 2])
# ['a', 'a', 'a', 'a', 'c', 'c']

print([i[1] for i in c.items() if i[1] >= 2])
# [4, 2]

print(sum(i[1] for i in c.items() if i[1] >= 2))
# 6

নিম্নলিখিতটি দুটি বা ততোধিক সংঘটন সহ উপাদানগুলির প্রকারগুলি বের করার এবং ঘটনার সংখ্যা গণনার একটি উদাহরণ। এই উদাহরণে, দুটি প্রকার, a এবং c.

print([i[0] for i in c.items() if i[1] >= 2])
# ['a', 'c']

print([i[1] >= 2 for i in c.items()])
# [True, False, True]

print(sum(i[1] >= 2 for i in c.items()))
# 2

একটি স্ট্রিং-এ একটি শব্দের উপস্থিতির সংখ্যা গণনা করে।

একটি সুনির্দিষ্ট উদাহরণ হিসাবে, আসুন একটি স্ট্রিং-এ একটি শব্দের উপস্থিতির সংখ্যা গণনা করি।

প্রথমে অপ্রয়োজনীয় কমা এবং পিরিয়ড রিপ্লেস() মেথড ব্যবহার করে একটি খালি স্ট্রিং দিয়ে প্রতিস্থাপন করুন এবং তারপর মুছে দিন। তারপর, স্পেস দ্বারা পৃথক করা একটি তালিকা তৈরি করতে split() পদ্ধতি ব্যবহার করুন।

s = 'government of the people, by the people, for the people.'

s_remove = s.replace(',', '').replace('.', '')

print(s_remove)
# government of the people by the people for the people

word_list = s_remove.split()

print(word_list)
# ['government', 'of', 'the', 'people', 'by', 'the', 'people', 'for', 'the', 'people']

আপনি যদি একটি তালিকা তৈরি করতে পারেন, আপনি প্রতিটি শব্দের সংখ্যা কতবার প্রদর্শিত হবে, শব্দের ধরন এবং সর্বাধিক_সাধারণ() সংগ্রহের সংখ্যা পেতে পারেন। সবচেয়ে বেশি বার প্রদর্শিত শব্দটি পেতে কাউন্টার।

print(word_list.count('people'))
# 3

print(len(set(word_list)))
# 6

c = collections.Counter(word_list)

print(c)
# Counter({'the': 3, 'people': 3, 'government': 1, 'of': 1, 'by': 1, 'for': 1})

print(c.most_common()[0][0])
# the

উপরের একটি খুব সহজ প্রক্রিয়া, তাই আরও জটিল প্রাকৃতিক ভাষা প্রক্রিয়াকরণের জন্য NLTK-এর মতো লাইব্রেরিগুলি ব্যবহার করা ভাল।

এছাড়াও, জাপানি টেক্সটের ক্ষেত্রে, স্প্লিট() টেক্সটকে বিভক্ত করতে ব্যবহার করা যাবে না কারণ সেখানে কোন স্পষ্ট শব্দ বিভাজন নেই। উদাহরণস্বরূপ, আপনি এটি অর্জন করতে Janome লাইব্রেরি ব্যবহার করতে পারেন।

একটি স্ট্রিং মধ্যে একটি অক্ষর সংঘটন সংখ্যা গণনা.

যেহেতু স্ট্রিংগুলিও একটি সিকোয়েন্স টাইপ, তাই এগুলি count() পদ্ধতির সাথে ব্যবহার করা যেতে পারে বা collections.Counter() এর কনস্ট্রাক্টরের কাছে একটি আর্গুমেন্ট হিসাবে পাস করা যেতে পারে।

s = 'supercalifragilisticexpialidocious'

print(s.count('p'))
# 2

c = collections.Counter(s)

print(c)
# Counter({'i': 7, 's': 3, 'c': 3, 'a': 3, 'l': 3, 'u': 2, 'p': 2, 'e': 2, 'r': 2, 'o': 2, 'f': 1, 'g': 1, 't': 1, 'x': 1, 'd': 1})

সর্বাধিক ঘন ঘন ঘটতে থাকা শীর্ষ 5টি অক্ষর পুনরুদ্ধার করার উদাহরণ।

print(c.most_common(5))
# [('i', 7), ('s', 3), ('c', 3), ('a', 3), ('l', 3)]

values, counts = zip(*c.most_common(5))

print(values)
# ('i', 's', 'c', 'a', 'l')