> For the complete documentation index, see [llms.txt](https://bangla-python-book.gitbook.io/python-programming-language/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bangla-python-book.gitbook.io/python-programming-language/data-types/collection-data-types/mapping/python-counter.md).

# কাউন্টার

অন্যান্য কালেকশন ডেটা টাইপের (list, tuple, dict) মত পাইথনের collection মডিউলের একটি ডেটা টাইপ বা ডেটা স্ট্রাকচার হচ্ছে counter. counter মূলত count ফাংশনের কাজ করে। তবে এটি একটি পুরো ডেটা সেটের বিভিন্ন ডেটার আলাদা আলাদা সংখ্যা গণনা করে।এটি dict ক্লাসের একটি সাবক্লাস। counter ডেটা টাইপে লিস্ট,টুপল,স্ট্রিং রাখা যায়। এটি একটি ডিকশিনারি রিটার্ণ করে। যার 'কি' হচ্ছে লিস্টের প্রতিটি ইউনিক ভ্যালু এবং 'ভ্যালু' হল সে এলিমেন্ট লিস্টে কত বার আছে তার মান।

```python
>>>from collections import Counter
>>>s = Counter('sfsjsbfajs')
>>>s
Counter({'s': 4, 'f': 2, 'j': 2, 'b': 1, 'a': 1})
>>>
>>>c = Counter(['a','b','a','a',1,4,1,1,'b'])
>>>c
Counter({'a': 3, 1: 3, 'b': 2, 4: 1})
>>> t = Counter((1,3,1))
>>>t
Counter({1: 2, 3: 1})
>>>type(t)
<class 'collections.Counter'>
>>>issubclass(Counter,dict)
True
```

আমরা কাউন্টার ডেটা টাইপে একটি মাত্র আর্গুমেন্ট পাস করতে পারব। অর্থাৎ একটি লিস্ট বা একটি স্ট্রিং বা একটি ট্যুপল। এক সাথে একাধিক আর্গুমেন্ট পাঠানো যাবে না তাহলে এক্সেপশন দেখাবে।

```python
>>> from collections import Counter
>>> c = Counter(['a','a','b'],[1,2,3,'a'])
TypeError: expected at most 1 arguments, got 2
```

এছাড়া ও পাইথন Counter() এ কি- ওয়ার্ড আর্গুমেন্ট পাস করা যায়৷

**আপডেটিং**

অন্যান্য কালেকশন ডেটা টাইপের মত Counter ও আপডেট করা যায়।একটি এম্পটি কাউন্টার বা এক্সিস্টিং কোন কাউন্টারেও নতুন এলিমেন্ট যোগ করা যায়।

```python
>>>c = Counter() 
# defining an empty Counter
>>>c.update("a") 
# adding values to "c"
>>>c
Counter({a:1})
>>>c.update("aab")
>>>c
Counter({a:3,b:1})
```

**ডিলিটিং**

কাউন্টার ডেটা টাইপ থেকে কোন ডেটা ডিলিট করার জন্য subtract() ফাংশন ব্যবহার করা হয়৷

```python
>>>c.subtract('a')
>>>c
Counter({'a':2, 'b':1})
>>>c.subtract('ab')
>>>c
Counter({'a':1, 'b':0})
```

**এক্সেসিং**

Counter এর গঠন পুরোপুরি ডিকশেনারির মতই৷ এর এলিমেন্ট গুলো এক্সেস ও করা যায় ডিকশনারির মত 'কি' ব্যবহার করে। তবে ডিকশিনারির ক্ষেত্রে কোন কি যদি অনুপস্থিত থাকত আমরা KeyError পেতাম, এক্ষেত্রে কাউন্টার আমাদের "শূন্য" পাঠাবে।

```python
>>>c['a']
3
>>>c['d']
0
```

আমরা যদি কোন 'কি' এর ভ্যালু বাড়াতে চাই মানে "a" এর মান "3" থেকে বাড়াতে বা কমাতে চাই তাহলে সে কি এর ভ্যালু রি-অ্যাসাইন করে দিতে হবে।

```python
>>>c['a'] = 2
>>>c
Counter ({'a':2, 'b':1})
```

কাউন্টারের আরেকটি ফাংশন হল elements(). এ ফাংশন টি কাউন্টারের ভেতর থাকা প্রতিটি এলিমেন্ট একটি ইটারেটর অবজেক্ট আকারে আউটপুট দেয়৷ তবে এর হিউম্যান রিডেবল ফরম্যাট পেতে আমাদের এটিকে লিস্টে কনভার্ট কর নিতে হয়।

```python
>>>c.elements()
<itertools.chain object at 0x7c07339860>

>>>list(c.elements())
Counter ('a', 'a', 'b')
```

এখানে লক্ষনীয় যে, কাউন্টারের ভেতর যে এলিমেন্ট(কি) এর মান(ভ্যালু) যত ছিল সেই এলিমেন্ট ঠিক ততবার আলাদা আলাদা ভাবে যুক্ত হয়েছে।

কাউন্টার একটি কন্টেইনার যা কোন ডেটাসেটে কোন ডেটা কত সংখ্যক বার রয়েছে তার ভ্যালু ধারন করে।
