لحساب تكرار عنصر واحد داخل قائمة بايثون، استخدم list.count(item). أما إذا أردت حساب تكرار جميع العناصر دفعة واحدة، فاستخدم Counter من مكتبة collections. وإذا كان هدفك إظهار العناصر التي تكررت فعلًا فقط، يمكنك تصفية نتائج Counter والإبقاء على العناصر التي يكون عددها أكبر من 1.
هذا هو الدرس 14 من سلسلة بايثون بالمثال. سنبدأ بالطريقة الأبسط للمبتدئ، ثم ننتقل إلى عدّ كل القيم، واستخراج المكررات فقط، ومعرفة أكثر عنصر تكرر. ستفيدك هذه المهارة مع أسماء الطلاب والمنتجات والكلمات والنتائج المتكررة، وهي تختلف عن حذف التكرار نفسه. وإذا كانت فكرة List جديدة عليك، راجع أولًا شرح القوائم في بايثون.
{alertInfo} الخلاصة السريعة: استخدمcount()لعنصر محدد، واستخدمCounterعندما تريد تكرار كل العناصر. ولا تستخدمcount()داخل حلقة لعدّ قائمة كبيرة إذا كان بإمكانك استخدام قاموس أوCounter.
{getToc} $title={محتوى المقال}
الحل السريع: أي طريقة تستخدم؟
| هدفك | الطريقة الأنسب | النتيجة |
|---|---|---|
| عدّ عنصر محدد | items.count(value) |
عدد صحيح مثل 3 |
| عدّ كل عناصر القائمة | Counter(items) |
كل عنصر مع عدد مرات ظهوره |
| إظهار العناصر المكررة فقط | تصفية نتائج Counter عندما يكون العدد أكبر من 1 |
العناصر التي تكررت مع عددها |
ما الذي سنتعلمه في هذا المثال؟
- استخدام
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 لحفظ العناصر التي انتهينا من عدّها. هذه الطريقة مفيدة لتعلّم الفكرة وربط List بالحلقات، لكنها ليست الخيار الأفضل للقوائم الكبيرة لأن count() تعيد فحص القائمة كل مرة.
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(). في التطبيقات العملية التي تحتاج عدّ جميع العناصر، يكون القاموس أو Counter أوضح وأكثر كفاءة عادةً.
طريقة أقصر باستخدام 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})
إظهار العناصر المكررة فقط
إذا كنت لا تريد عرض العناصر التي ظهرت مرة واحدة، صفِّ نتائج Counter بحيث تحتفظ فقط بالقيم التي عددها أكبر من 1:
from collections import Counter
items = ["A", "B", "A", "C", "B", "A"]
counts = Counter(items)
duplicates = {
item: count
for item, count in counts.items()
if count > 1
}
print(duplicates)
الناتج:
{'A': 3, 'B': 2}
هنا أصبح معنى «العناصر المكررة» واضحًا: نعرض فقط العناصر التي ظهرت أكثر من مرة. أما إذا كان هدفك حذف التكرارات والحصول على قائمة قيم فريدة، فهذه نية مختلفة؛ راجع حذف التكرار من قائمة في بايثون.
كم عدد القيم المختلفة التي تكررت؟
إذا أردت رقمًا واحدًا يوضح عدد القيم المختلفة التي ظهرت أكثر من مرة:
duplicate_values_count = sum(
1 for count in counts.values() if count > 1
)
print(duplicate_values_count)
في المثال السابق الناتج هو 2 لأن القيمتين "A" و"B" هما اللتان تكررتا.
ولمعرفة أكثر عنصر متكرر، استخدم most_common(1):
most_common_color = counts.most_common(1)
print("أكثر لون متكرر:", most_common_color)
الناتج:
أكثر لون متكرر: [('red', 3)]
أي طريقة أختار؟
| الطريقة | متى تستخدمها؟ | ملاحظات |
|---|---|---|
list.count() |
عندما تريد عدّ عنصر واحد أو عدد قليل من العناصر المعروفة. | الأبسط للمبتدئ. |
for + count() |
للتدريب على القوائم والحلقات والشروط. | تعليمي؛ قد يصبح بطيئًا لأن 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)
يمكنك تطويره لاحقًا ليقبل البحث دون التأثر بحالة الحروف أو المسافات الزائدة.
روابط داخلية مفيدة من بايثون العرب
مصادر موثوقة للتوسع
- Python Lists and list methods — Python Documentation
- Counter — Python Documentation
- More Control Flow Tools — Python Documentation
الخلاصة
- استخدم
list.count(item)عندما تريد معرفة عدد تكرار عنصر محدد. - استخدم
forمعcount()للتعلّم على قوائم صغيرة، وليس كخيار أول للقوائم الكبيرة. - استخدم Dictionary أو
Counterعندما تريد ملخصًا لتكرار كل العناصر. - صفِّ نتائج
Counterبشرطcount > 1عندما تريد العناصر المكررة فقط. - وحّد النصوص باستخدام
lower()أوstrip()عندما تكون البيانات غير منظمة. - ابدأ بقوائم صغيرة، ثم طبّق الفكرة على أسماء أو منتجات أو كلمات في مشروع بسيط.
أسئلة شائعة
ما الفرق بين count وCounter في Python؟
count() تعدّ عنصرًا واحدًا داخل قائمة أو نص. أما Counter فتنشئ ملخصًا لعدد تكرار كل العناصر في iterable مثل List أو String.
هل count تعمل مع النصوص أيضًا؟
نعم. يمكن استخدام count() مع النصوص لمعرفة عدد مرات ظهور حرف أو كلمة أو جزء من النص، لكن هذا الدرس ركز على القوائم.
ماذا تعيد count إذا لم يكن العنصر موجودًا؟
تعيد 0، لذلك يمكنك استخدامها بأمان لمعرفة هل العنصر تكرر دون الحاجة إلى شرط إضافي.
ما أسرع طريقة لعد كل عناصر قائمة؟
إذا أردت عدّ جميع العناصر، فغالبًا يكون Counter أو قاموس يتم تحديثه أثناء المرور على القائمة أفضل من استدعاء list.count() داخل حلقة، لأن count() تعيد فحص القائمة في كل استدعاء.
هل يمكن استخدام Counter مع قائمة من القوائم؟
ليس مباشرة، لأن القائمة نفسها غير قابلة للاستخدام كمفتاح قاموس. يمكنك تحويل القوائم الداخلية إلى Tuple إذا كان ذلك مناسبًا لطبيعة بياناتك.




