عداد Python – Python Collections Counter

فئة العداد في Python هي جزء من وحدة المجموعات. العداد هو فئة فرعية من القاموس وتُستخدم لتتبع العناصر وعددها.

عداد Python

العداد هو مجموعة غير مرتبة حيث يتم تخزين العناصر كمفاتيح Dict وعددها كقيمة للقاموس. يمكن أن يكون عدد عناصر العداد موجبًا أو صفرًا أو سالبًا. ومع ذلك، لا يوجد قيود على مفاتيحه وقيمه. على الرغم من أن القيم تهدف إلى أن تكون أرقامًا ولكن يمكننا تخزين كائنات أخرى أيضًا.

إنشاء كائن عداد Python

يمكننا إنشاء عداد فارغ أو البدء بقيم أولية أيضًا.

from collections import Counter

# عداد فارغ
counter = Counter()
print(counter)  # Counter()

# عداد بقيم أولية
counter = Counter(['a', 'a', 'b'])
print(counter)  # Counter({'a': 2, 'b': 1})

counter = Counter(a=2, b=3, c=1)
print(counter)  # Counter({'b': 3, 'a': 2, 'c': 1})

يمكننا أيضًا استخدام أي متكرر كوسيط لإنشاء كائن عداد. لذا يمكن استخدام السلسلة النصية والقائمة أيضًا لإنشاء كائن عداد.

# Iterable as argument for Counter
counter = Counter('abc')
print(counter)  # Counter({'a': 1, 'b': 1, 'c': 1})

# List as argument to Counter
words_list = ['Cat', 'Dog', 'Horse', 'Dog']
counter = Counter(words_list)
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})

# Dictionary as argument to Counter
word_count_dict = {'Dog': 2, 'Cat': 1, 'Horse': 1}
counter = Counter(word_count_dict)
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})

كما ذكرت أعلاه، يمكننا استخدام البيانات غير الرقمية كقيم للعد أيضًا، ولكن ذلك سيعيب هدف فئة العداد.

# يعمل العداد مع القيم غير الرقمية أيضًا
special_counter = Counter(name='Pankaj', age=20)
print(special_counter)  # Counter({'name': 'Pankaj', 'age': 20})

أساليب عداد Python

لنلقي نظرة على أساليب فئة العداد وبعض العمليات الأخرى التي يمكننا القيام بها عليها.

الحصول على عدد العناصر

# الحصول على العدد
counter = Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
countDog = counter['Dog']
print(countDog)  # 2

إذا حاولنا الحصول على العدد لمفتاح غير موجود، سيعيد القيمة 0 ولن يثير KeyError.

# الحصول على العدد لمفتاح غير موجود، لا يتسبب في KeyError
print(counter['Unicorn'])  # 0

تعيين عدد العناصر

يمكننا أيضًا تعيين عدد العنصر الحالي في العداد. إذا لم يكن العنصر موجودًا، فسيتم إضافته إلى العداد.

counter = Counter({'Dog': 2, 'Cat': 1, 'Horse': 1})
# تعيين العدد
counter['Horse'] = 0
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 0})

# تعيين العدد for non-existing key, adds to Counter
counter['Unicorn'] = 1
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Unicorn': 1, 'Horse': 0})

حذف عنصر من العداد

يمكننا استخدام del لحذف عنصر من كائن العداد.

# حذف عنصر من العداد
del counter['Unicorn']
print(counter)  # Counter({'Dog': 2, 'Cat': 1, 'Horse': 0})

elements()

تُرجع هذه الطريقة قائمة العناصر في العداد. يتم إرجاع العناصر فقط ذات العدد الموجب.

counter = Counter({'Dog': 2, 'Cat': -1, 'Horse': 0})

# elements()
elements = counter.elements()  # doesn't return elements with count 0 or less
for value in elements:
    print(value)

سيطبع الكود أعلاه “كلب” مرتين لأن عدده 2. سيتم تجاهل العناصر الأخرى لأن لديها عدد غير موجب. العداد مجموعة غير مرتبة، لذا يتم إرجاع العناصر بأي ترتيب.

most_common(n)

تُرجع هذه الطريقة العناصر الأكثر شيوعًا من العداد. إذا لم نقدم قيمة ‘n’، يتم إرجاع القاموس المرتب من العناصر الأكثر شيوعًا إلى الأقل شيوعًا. يمكننا استخدام التقطيع للحصول على العناصر الأقل شيوعًا في هذا القاموس المرتب.

counter = Counter({'Dog': 2, 'Cat': -1, 'Horse': 0})

# most_common()
most_common_element = counter.most_common(1)
print(most_common_element)  # [('Dog', 2)]

least_common_element = counter.most_common()[:-2:-1]
print(least_common_element)  # [('Cat', -1)]

تطبيق الطرح () وتحديث ()

تُستخدم طريقة الطرح() في العداد لطرح عدد العناصر من عداد آخر. يُستخدم طريقة التحديث() لإضافة العدود من عداد آخر.

counter = Counter('ababab')
print(counter)  # Counter({'a': 3, 'b': 3})
c = Counter('abc')
print(c)  # Counter({'a': 1, 'b': 1, 'c': 1})

# subtract
counter.subtract(c)
print(counter)  # Counter({'a': 2, 'b': 2, 'c': -1})

# update
counter.update(c)
print(counter)  # Counter({'a': 3, 'b': 3, 'c': 0})

عمليات حسابية في عداد Python

يمكننا أيضًا إجراء بعض العمليات الحسابية على العدادات، تمامًا مثل الأرقام. ومع ذلك، يتم إرجاع العناصر ذات العدد الموجب فقط مع هذه العمليات.

# العمليات الحسابية
c1 = Counter(a=2, b=0, c=-1)
c2 = Counter(a=1, b=-1, c=2)

c = c1 + c2  # return items having +ve count only
print(c)  # Counter({'a': 3, 'c': 1})

c = c1 - c2  # keeps only +ve count elements
print(c)  # Counter({'a': 1, 'b': 1})

c = c1 & c2  # intersection min(c1[x], c2[x])
print(c)  # Counter({'a': 1})

c = c1 | c2  # union max(c1[x], c2[x])
print(c)  # Counter({'a': 2, 'c': 2})

العمليات المتنوعة على عداد Python

دعونا نلقي نظرة على بعض أمثلة الشفرة للعمليات المتنوعة التي يمكننا القيام بها على كائنات العداد.

counter = Counter({'a': 3, 'b': 3, 'c': 0})
# أمثلة متنوعة
print(sum(counter.values()))  # 6

print(list(counter))  # ['a', 'b', 'c']
print(set(counter))  # {'a', 'b', 'c'}
print(dict(counter))  # {'a': 3, 'b': 3, 'c': 0}
print(counter.items())  # dict_items([('a', 3), ('b', 3), ('c', 0)])

# إزالة العناصر ذات العدد 0 أو السالب
counter = Counter(a=2, b=3, c=-1, d=0)
counter = +counter
print(counter)  # Counter({'b': 3, 'a': 2})

# مسح جميع العناصر
counter.clear()
print(counter)  # Counter()

هذا كل شيء بالنسبة لفئة العداد Python.

يمكنك تنزيل الشفرة المثالية الكاملة من مستودع GitHub الخاص بي.

المرجع: وثائق Python

Source:
https://www.digitalocean.com/community/tutorials/python-counter-python-collections-counter