Python Programming

عدّ تكرار العناصر في مصفوفات بايثون بكفاءة

Spread the love

يُعدّ عدّ تكرار العناصر في مصفوفة بايثون مهمة أساسية مع عدة حلول فعّالة. تتناول هذه المقالة طريقتين شائعتين: الاستفادة من وحدة collections واستخدام مكتبة NumPy. تُقدّم كل طريقة مزايا مُتميّزة حسب احتياجاتك المحددة وخصائص بياناتك.

جدول المحتويات

استخدام وحدة collections

توفر وحدة collections كائن Counter، وهو أداة قوية لعدّ تردد العناصر في أيّ مُتكرّر. هذه الطريقة مُتعددة الاستخدامات، وقابلة للقراءة، وفعّالة للمصفوفات ذات الأحجام وأنواع البيانات المختلفة.


from collections import Counter

my_array = [1, 2, 2, 3, 3, 3, 4, 4, 4, 4, 'a', 'a', 'b']

# عدّ التكرارات باستخدام Counter
occurrences = Counter(my_array)

# الوصول إلى عدد تكرار عنصر مُحدد
item_to_count = 3
count = occurrences[item_to_count]
print(f"عدد تكرارات {item_to_count} هو: {count}")  # الإخراج: 3

# الوصول إلى عدد تكرار عنصر مُحدد (نص)
item_to_count = 'a'
count = occurrences[item_to_count]
print(f"عدد تكرارات {item_to_count} هو: {count}")  # الإخراج: 2

# طباعة عدد تكرارات جميع العناصر
print(f"جميع عدد تكرارات العناصر: {occurrences}") 
# الإخراج: Counter({4: 4, 3: 3, 2: 2, 1: 1, 'a': 2, 'b': 1})

يُظهر هذا الكود بساطة ومرونة Counter. فهو يتعامل بسلاسة مع كل من أنواع البيانات العددية والنوع النصي.

استخدام مكتبة NumPy

تمّ تحسين NumPy للحسابات العددية، وهي توفر دوال مُعالجة مُصفوفات فعّالة. بالنسبة للمصفوفات العددية الكبيرة، تُقدّم NumPy مزايا أداء كبيرة.


import numpy as np

my_array = np.array([1, 2, 2, 3, 3, 3, 4, 4, 4, 4])

item_to_count = 3

# استخدام count_nonzero في NumPy مع الفهرسة المنطقية
count = np.count_nonzero(my_array == item_to_count)
print(f"عدد تكرارات {item_to_count} هو: {count}")  # الإخراج: 3

# عدّ جميع التكرارات
unique, counts = np.unique(my_array, return_counts=True)
print(dict(zip(unique, counts))) # الإخراج: {1: 1, 2: 2, 3: 3, 4: 4}

يُوفّر count_nonzero في NumPy مُدمجًا مع الفهرسة المنطقية حلاً مُوجزًا وعالي الأداء للمصفوفات العددية. يُقدّم np.unique طريقة مُريحة للحصول على عدد تكرارات جميع العناصر الفريدة.

اختيار الطريقة المناسبة

يعتمد النهج الأمثل على سياقك المحدد:

  • collections.Counter: الأنسب للمصفوفات الأصغر حجمًا، والمصفوفات ذات أنواع البيانات المُختلطة، أو عندما تحتاج إلى عدّ تكرارات عناصر مُتعددة بكفاءة وشيفرة واضحة وقابلة للقراءة.
  • NumPy: مثالي للمصفوفات العددية الكبيرة حيث يكون الأداء أمرًا بالغ الأهمية. تُقدّم عمليات NumPy المُتجهة مزايا سرعة كبيرة.

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *