حساب عدد تكرارات كل عنصر في قائمة مع عداد بايثون

اعمال

في Python ، يمكن الحصول على عدد جميع العناصر في قائمة أو مجموعة باستخدام الوظيفة المضمنة len () ، ويمكن الحصول على عدد كل عنصر (عدد مرات حدوث كل عنصر) باستخدام طريقة count () .

بالإضافة إلى ذلك ، يمكن استخدام فئة Counter لمجموعات مكتبة Python القياسية للحصول على العناصر بترتيب عدد التكرارات.

في هذا القسم ، سنناقش ما يلي

  • احسب العدد الإجمالي للعناصر:len()
  • احسب عدد كل عنصر (عدد تكرارات كل عنصر):count()
  • إستعمال.collections.Counter
  • يتم استرجاع العناصر بترتيب تكرار حدوثها:most_common()
  • عد عدد (نوع) العناصر غير المتداخلة (العناصر الفريدة).
  • عد عدد العناصر التي تحقق الشرط.

بالإضافة إلى ذلك ، كمثال ملموس ، يتم شرح ما يلي مع نموذج التعليمات البرمجية.

  • تحسب عدد مرات ظهور كلمة في سلسلة.
  • عد عدد تكرارات حرف في سلسلة.

العينة عبارة عن قائمة ، ولكن يمكن إجراء نفس المعالجة باستخدام المجموعات.

احسب العدد الإجمالي للعناصر: لين ()

لحساب العدد الإجمالي للعناصر في قائمة أو مجموعة ، استخدم الوظيفة المضمنة 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

إذا كنت ترغب في الحصول على عدد تكرارات كل عنصر مرة واحدة ، فإن المجموعة التالية مفيدة.

كيفية استخدام المجموعات

تحتوي مجموعات مكتبة Python القياسية على فئة Counter.

عداد () هو فئة فرعية من نوع القاموس ديكت ، والذي يحتوي على بيانات في شكل عناصر كمفاتيح وتكرار كقيم.

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 ، وما إلى ذلك. ويمكن استخدامها كما هي إذا كنت تريد تشغيل تعليمة for. إذا كنت تريد تحويله إلى قائمة ، فاستخدم list ().

الحصول على العناصر بترتيب تكرار الظهور: طريقة 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

يمكنك أيضًا استخدام set () ، المُنشئ لمجموعة نوع المجموعة ، والتي تكون أسهل إذا لم تكن بحاجة إلى كائن عداد.

نوع المجموعة هو نوع بيانات لا يحتوي على عناصر مكررة. تمرير قائمة لتعيين () يتجاهل القيم المكررة ويعيد كائنًا من نوع معين بقيم فريدة فقط كعناصر. يتم الحصول على عدد العناصر من هذا النوع بواسطة 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]

يؤدي تطبيق تعبير شرطي على كل عنصر في تدوين القائمة إلى الحصول على قائمة عناصرها منطقية منطقية (صواب ، خطأ). Boolean type bool هو فئة فرعية من نوع عدد صحيح int ، حيث يتم التعامل مع true كـ 1 و false كـ 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

إذا استبدلنا [] في رمز list comprehension بـ () ، نحصل على تعبير منشئ. يُنشئ تدوين استيعاب القائمة قائمة بجميع العناصر التي تمت معالجتها ، بينما يعالج تعبير المولد العناصر بشكل تسلسلي وبالتالي يكون أكثر كفاءة في الذاكرة.

عندما يكون تعبير المولد هو الوسيطة الوحيدة ، يمكن حذف () ، لذلك يمكن كتابته كما في الحالة الأخيرة.

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

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

إذا كنت تريد حساب عدد القيم الخاطئة (عدد العناصر التي لا تفي بالشرط) ، فاستخدم لا. لاحظ أن & GT. أسبقية أعلى من عدمه (يتم احتسابها أولاً) ، لذا فإن الأقواس () في (i & lt ؛ 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

يستخدم العداد للعد بناءً على عدد التكرارات. تسترجع العناصر () مجموعة من (عنصر ، عدد التكرارات) ، ويحدد عدد التكرارات الشرط.

فيما يلي مثال لاستخراج العناصر ذات التكرارات مرتين أو أكثر وإحصاء العدد الإجمالي للتكرارات. في هذا المثال ، هناك أربعة آيات واثنين من ج ، ليصبح المجموع ستة.

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

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

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

تحسب عدد مرات ظهور كلمة في سلسلة.

كمثال ملموس ، دعنا نحسب عدد تكرارات الكلمة في سلسلة.

أولاً ، استبدل الفواصل والنقاط غير الضرورية بسلسلة فارغة باستخدام طريقة replace () ، ثم احذفها. ثم استخدم طريقة 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 لمعالجة لغة طبيعية أكثر تعقيدًا.

أيضًا ، في حالة النص الياباني ، لا يمكن استخدام Split () لتقسيم النص لأنه لا يوجد فصل واضح للكلمات. على سبيل المثال ، يمكنك استخدام مكتبة Janome لتحقيق ذلك.

عد عدد تكرارات حرف في سلسلة.

نظرًا لأن السلاسل هي أيضًا نوع تسلسل ، فيمكن استخدامها مع طريقة count () أو تمريرها كوسيطة إلى مُنشئ المجموعات.

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})

مثال على استرجاع الخمسة أحرف الأكثر تكرارا.

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')