في الدروس السابقة من سلسلة بايثون بالمثال تعاملنا مع القوائم List بطرق عملية، مثل حساب مجموع العناصر والبحث عن عنصر داخل القائمة. الآن سنأخذ مهارة مفيدة جدًا في برامج كثيرة: معرفة عدد مرات تكرار عنصر داخل List في Python.
ستحتاج هذه الفكرة عند تحليل درجات الطلاب، معرفة أكثر منتج تكرر في طلبات العملاء، عد الكلمات المتكررة، مراجعة أسماء داخل قائمة، أو فحص بيانات بسيطة قبل استخدامها في مشروع أكبر.
{alertInfo} الفكرة ببساطة: الدالةcount()تخبرك كم مرة ظهر عنصر معين داخل القائمة. وإذا احتجت إلى عدّ كل العناصر دفعة واحدة، يمكنك استخدام حلقةforأوCounter.
{getToc} $title={محتوى المقال}
ما الذي سنتعلمه في هذا المثال؟
- استخدام
count()لمعرفة تكرار عنصر محدد. - عدّ تكرار كل عنصر داخل القائمة باستخدام
for. - استخدام
Counterعندما تكون القائمة أكبر أو عندما تريد ملخصًا جاهزًا. - معرفة أكثر عنصر متكرر داخل List.
- تجنب أخطاء شائعة، مثل اختلاف الحروف الكبيرة والصغيرة أو استخدام
count()بدون عنصر.
مثال البداية: قائمة منتجات متكررة
لنفترض أن لدينا قائمة تحتوي على منتجات طلبها العملاء خلال يوم واحد:
products = [
"Laptop",
"Mouse",
"Laptop",
"Keyboard",
"Mouse",
"Laptop"
]
نريد الآن معرفة: كم مرة ظهر المنتج "Laptop"؟
الطريقة الأولى: استخدام count مع List
الطريقة الأسهل هي استخدام الدالة count() الخاصة بالقوائم. اكتب اسم القائمة، ثم نقطة، ثم count، وضع العنصر الذي تريد عدّه بين القوسين.
products = [
"Laptop",
"Mouse",
"Laptop",
"Keyboard",
"Mouse",
"Laptop"
]
laptop_count = products.count("Laptop")
print("عدد مرات ظهور Laptop:", laptop_count)
الناتج:
عدد مرات ظهور Laptop: 3
تعد count() عنصرًا واحدًا محددًا وتعيد عدد مرات وجوده في القائمة. إذا لم يكن العنصر موجودًا، فستعيد 0 بدل ظهور خطأ.
شرح count خطوة بخطوة
في السطر التالي:
laptop_count = products.count("Laptop")
productsهي القائمة التي نبحث داخلها.count()هي الدالة التي تعدّ التكرار."Laptop"هو العنصر الذي نريد معرفة عدد مرات ظهوره.- الناتج يُحفظ داخل المتغير
laptop_count.
يمكنك تغيير العنصر بسهولة:
print(products.count("Mouse"))
print(products.count("Keyboard"))
print(products.count("Monitor"))
الناتج سيكون:
2
1
0
مثال عملي: عدّ الحضور والغياب
يمكنك استخدام الفكرة نفسها لمعرفة عدد مرات حضور الطالب أو غيابه داخل قائمة:
attendance = [
"حاضر",
"حاضر",
"غائب",
"حاضر",
"غائب"
]
present_count = attendance.count("حاضر")
absent_count = attendance.count("غائب")
print("عدد الحضور:", present_count)
print("عدد الغياب:", absent_count)
هذه الطريقة مناسبة جدًا عندما تعرف مسبقًا العناصر التي تريد عدّها، مثل "حاضر" و"غائب" أو "ناجح" و"راسب".
متى لا تكفي count وحدها؟
إذا كانت لديك قائمة طويلة وتريد معرفة تكرار كل عنصر، فكتابة count() يدويًا لكل عنصر ليست عملية. هنا نحتاج إلى طريقة تجمع النتائج في جدول أو قاموس.
لنستخدم قائمة ألوان:
colors = [
"red",
"blue",
"red",
"green",
"blue",
"red"
]
الطريقة الثانية: عدّ كل العناصر باستخدام for وcount
سنمر على العناصر بحلقة for، لكننا لا نريد طباعة العنصر أكثر من مرة. لذلك ننشئ قائمة فارغة باسم counted_colors لحفظ العناصر التي انتهينا من عدّها.
colors = [
"red",
"blue",
"red",
"green",
"blue",
"red"
]
counted_colors = []
for color in colors:
if color not in counted_colors:
total = colors.count(color)
print(color, =, total)
counted_colors.append(color)
الناتج:
red = 3
blue = 2
green = 1
هذه الطريقة مفيدة تعليميًا لأنها تجمع بين القوائم وحلقة for والشرط if والدالة count().
طريقة أقصر باستخدام Dictionary
عندما تبدأ بالتعامل مع القواميس Dictionary، تستطيع بناء قاموس يحفظ كل عنصر كـمفتاح وعدد تكراره كقيمة:
colors = [
"red",
"blue",
"red",
"green",
"blue",
"red"
]
counts = {}
for color in colors:
if color in counts:
counts[color] += 1
else:
counts[color] = 1
print(counts)
الناتج:
{'red': 3, 'blue': 2, 'green': 1}
هذه الفكرة مهمة لأنها تمهد لك لاستخدام Counter، وهو حل جاهز من مكتبة Python القياسية.
الطريقة الثالثة: استخدام Counter لعدّ عناصر List
تحتوي Python على أداة جاهزة اسمها Counter داخل مكتبة collections. وهي نوع خاص من القواميس مصمم لعد العناصر القابلة للاستخدام كمفاتيح.
from collections import Counter
colors = [
"red",
"blue",
"red",
"green",
"blue",
"red"
]
counts = Counter(colors)
print(counts)
الناتج سيكون قريبًا من:
Counter({'red': 3, 'blue': 2, 'green': 1})
ولمعرفة أكثر عنصر متكرر، استخدم most_common(1):
most_common_color = counts.most_common(1)
print("أكثر لون متكرر:", most_common_color)
الناتج:
أكثر لون متكرر: [('red', 3)]
أي طريقة أختار؟
| الطريقة | متى تستخدمها؟ | ملاحظات |
|---|---|---|
list.count() |
عندما تريد عدّ عنصر واحد أو عدد قليل من العناصر المعروفة. | الأبسط للمبتدئ. |
for + count() |
للتدريب على القوائم والحلقات والشروط. | مفيد للفهم، لكنه ليس الأفضل للقوائم الكبيرة جدًا. |
| Dictionary | عندما تريد بناء الفكرة بنفسك ومعرفة آلية العدّ. | ينمي فهمك للقواميس. |
Counter |
عندما تريد تكرار كل العناصر وملخصًا جاهزًا. | واضح ومناسب للمشاريع العملية. |
مثال تطبيقي: معرفة أكثر كلمة تكررت
يمكنك تطبيق الفكرة على قائمة كلمات. لاحظ أن Python تعتبر "Python" و"python" قيمتين مختلفتين بسبب اختلاف حالة الحروف.
from collections import Counter
words = [
"Python",
"python",
"List",
"Python",
"loop",
"python"
]
normalized_words = [word.lower() for word in words]
word_counts = Counter(normalized_words)
print(word_counts.most_common(1))
هنا استخدمنا lower() لتوحيد حالة الحروف قبل العد. بهذه الطريقة تُحسب "Python" و"python" ككلمة واحدة.
أخطاء شائعة عند استخدام count مع List
1. استخدام count بدون عنصر
هذا الكود غير صحيح:
items.count()
لأن count() تحتاج إلى عنصر محدد كي تعرف ما الذي ستعده.
الصحيح:
items.count("Python")
2. تجاهل الحروف الكبيرة والصغيرة
names = ["Ali", "ali", "ALI"]
print(names.count("Ali"))
الناتج هنا 1 فقط. إذا أردت تجاهل حالة الحروف، وحّد النصوص أولًا باستخدام lower() أو casefold() عند الحاجة.
3. استخدام Counter على عناصر غير قابلة للعد كمفاتيح
Counter يعمل مع عناصر يمكن استخدامها كمفاتيح قاموس، مثل النصوص والأرقام وTuples. لكنه لا يعمل مباشرة مع List داخل List، لأن القوائم قابلة للتعديل ولا تصلح كمفاتيح.
{alertWarning} مهم: إذا كانت البيانات قادمة من المستخدم أو من ملف، نظف النصوص قبل عدّها. قد توجد مسافات زائدة أو اختلافات في حالة الحروف تجعل العنصر نفسه يظهر كأنه عناصر مختلفة.
تدريب عملي
جرّب تنفيذ التمارين التالية بنفسك:
- أنشئ قائمة فيها 10 أرقام، واحسب عدد مرات ظهور الرقم
5. - أنشئ قائمة أسماء فيها تكرار، ثم اعرض عدد تكرار كل اسم.
- استخدم
Counterلمعرفة أكثر اسم تكرر. - أضف
lower()إلى قائمة كلمات إنجليزية قبل العد. - اكتب برنامجًا يطلب من المستخدم اسمًا ثم يخبره كم مرة ظهر داخل قائمة ثابتة.
مثال حل مختصر للتمرين الأخير
names = ["Ali", "Sara", "Ali", "Mona"]
search_name = input("اكتب الاسم الذي تريد البحث عنه: ")
total = names.count(search_name)
print("عدد مرات التكرار:", total)
يمكنك تطويره لاحقًا ليقبل البحث دون التأثر بحالة الحروف أو المسافات الزائدة.
روابط داخلية مفيدة من بايثون العرب
- بايثون بالمثال 13: البحث داخل List في Python بطريقة عملية
- بايثون بالمثال: حساب مجموع عناصر List في Python بأكثر من طريقة
- الفرق بين append وextend في Python للمبتدئين
- مشكلة وحل: IndexError list index out of range في Python
مصادر موثوقة للتوسع
- Python Lists and list methods — Python Documentation
- Counter — Python Documentation
- More Control Flow Tools — Python Documentation
الخلاصة
- استخدم
list.count(item)عندما تريد معرفة عدد تكرار عنصر محدد. - استخدم
forمعcount()لتفهم فكرة عدّ جميع العناصر. - استخدم Dictionary أو
Counterعندما تريد ملخصًا لتكرار كل العناصر. - وحّد النصوص باستخدام
lower()أوstrip()عندما تكون البيانات غير منظمة. - ابدأ بقوائم صغيرة، ثم طبّق الفكرة على أسماء أو منتجات أو كلمات في مشروع بسيط.
أسئلة شائعة
ما الفرق بين count وCounter في Python؟
count() تعدّ عنصرًا واحدًا داخل قائمة أو نص. أما Counter فتنشئ ملخصًا لعدد تكرار كل العناصر في iterable مثل List أو String.
هل count تعمل مع النصوص أيضًا؟
نعم. يمكن استخدام count() مع النصوص لمعرفة عدد مرات ظهور حرف أو كلمة أو جزء من النص، لكن هذا الدرس ركز على القوائم.
ماذا تعيد count إذا لم يكن العنصر موجودًا؟
تعيد 0، لذلك يمكنك استخدامها بأمان لمعرفة هل العنصر تكرر دون الحاجة إلى شرط إضافي.
ما أسرع طريقة لعد كل عناصر قائمة؟
في التطبيقات العملية غالبًا يكون Counter واضحًا ومناسبًا، لأنه ينشئ قاموسًا من العناصر وعدد تكرارها مباشرة.
هل يمكن استخدام Counter مع قائمة من القوائم؟
ليس مباشرة، لأن القائمة نفسها غير قابلة للاستخدام كمفتاح قاموس. يمكنك تحويل القوائم الداخلية إلى Tuple إذا كان ذلك مناسبًا لطبيعة بياناتك.




