البرمجة

التعامل مع الصفوف والمجموعات والقواميس في بايثون

جدول المحتوى

التعامل مع الصفوف، المجموعات والقواميس في بايثون: شرح شامل ومفصل

تُعدّ هياكل البيانات من أهم الركائز التي يبنى عليها تطوير البرمجيات، إذ تمكّن المبرمجين من تنظيم البيانات بكفاءة وتسهيل عمليات التخزين، البحث، التعديل، والحذف. في لغة بايثون، تُعتبر الصفوف (Tuples)، والمجموعات (Sets)، والقواميس (Dictionaries) من أكثر هياكل البيانات استخدامًا، لما توفره من مزايا فريدة وخصائص مناسبة لمختلف أنواع التطبيقات. هذا المقال يقدّم شرحًا مطوّلًا ومفصلًا حول هذه الهياكل، كيفية التعامل معها، أهم الخصائص التي تميز كلًّا منها، وأفضل الممارسات لاستخدامها في بيئة البرمجة.


أولًا: الصفوف (Tuples) في بايثون

تعريف الصفوف وخصائصها

الصفوف هي نوع من أنواع هياكل البيانات في بايثون تُستخدم لتخزين مجموعة من العناصر المرتبة. تشبه الصفوف القوائم (Lists) إلى حد كبير، لكن الاختلاف الجوهري يكمن في أن الصفوف غير قابلة للتغيير (Immutable)، مما يعني أنه لا يمكن تعديل محتوياتها بعد إنشائها.

  • يتم تعريف الصفوف باستخدام الأقواس المستديرة ()، على سبيل المثال:

python
my_tuple = (10, 20, 30)
  • يمكن أن تحتوي الصفوف على عناصر من أنواع مختلفة، كالأعداد، النصوص، القوائم، أو حتى صفوف أخرى.

مزايا استخدام الصفوف

  • الثبات (Immutability): ضمان عدم تغيير المحتويات بعد تعريفها، مما يجعلها مناسبة لتخزين البيانات التي يجب أن تظل ثابتة طوال فترة تنفيذ البرنامج.

  • الأداء: الوصول إلى عناصر الصفوف أسرع نسبيًا مقارنة بالقوائم، بسبب عدم الحاجة لإدارة التغييرات.

  • استخدامها كمفاتيح في القواميس: بفضل ثباتها، يمكن استخدام الصفوف كمفاتيح في القواميس، وهو أمر غير ممكن مع القوائم.

العمليات الأساسية على الصفوف

1. إنشاء الصفوف

python
empty_tuple = () single_element_tuple = (5,) # لاحظ الفاصلة

2. الوصول للعناصر

يمكن الوصول إلى العناصر باستخدام الفهرسة:

python
print(my_tuple[0]) # 10 print(my_tuple[-1]) # 30

3. التكرار عبر الصفوف

python
for element in my_tuple: print(element)

4. التحقق من وجود عنصر

python
if 20 in my_tuple: print("العنصر موجود")

استخدامات متقدمة للصفوف

  • التعامل مع القيم متعددة المرتبطة: كإرجاع أكثر من قيمة من دالة واحدة.

  • الاستفادة من الطابعات (Unpacking): توزيع عناصر الصفوف على متغيرات مختلفة بسهولة:

python
a, b, c = my_tuple

القيود على الصفوف

  • عدم القدرة على تعديل العناصر مباشرة.

  • لإجراء تغييرات، يجب إنشاء صف جديد يعتمد على الموجود.


ثانيًا: المجموعات (Sets) في بايثون

ماهية المجموعات وخصائصها

المجموعة هي هيكل بيانات غير مرتب وغير مسموح فيه تكرار العناصر، يُستخدم بشكل رئيسي لتخزين عناصر فريدة فقط. تُعرف المجموعات باستخدام الأقواس المعقوفة {} أو دالة set().

خصائص المجموعات

  • عدم الترتيب: لا يمكن الاعتماد على ترتيب العناصر في المجموعات.

  • العناصر الفريدة: أي عنصر يمكن أن يظهر مرة واحدة فقط.

  • قابلية التعديل (Mutable): يمكن إضافة أو حذف العناصر.

إنشاء المجموعات

python
my_set = {1, 2, 3, 4} empty_set = set() # لا يمكن إنشاء مجموعة فارغة باستخدام {}

العمليات الأساسية على المجموعات

1. إضافة العناصر

python
my_set.add(5)

2. حذف العناصر

python
my_set.remove(3) # يرفع خطأ إذا لم يكن العنصر موجودًا my_set.discard(10) # لا يرفع خطأ

3. التحقق من وجود عنصر

python
if 2 in my_set: print("العنصر موجود")

4. العمليات الرياضية بين المجموعات

المجموعات في بايثون تدعم مجموعة واسعة من العمليات الرياضية التي تسهل التعامل مع مجموعات البيانات:

العملية الوصف المثال الناتج
اتحاد (Union) عناصر موجودة في أي مجموعة منهم `A B`
تقاطع (Intersection) عناصر مشتركة في المجموعتين A & B مجموعة العناصر المشتركة
الفرق (Difference) عناصر في الأولى وغير موجودة في الثانية A - B عناصر موجودة في A فقط
الفرق المتماثل (Symmetric Difference) عناصر موجودة في إحدى المجموعتين فقط A ^ B عناصر غير مشتركة بين المجموعتين

5. التكرار عبر العناصر

python
for item in my_set: print(item)

استخدامات المجموعات

  • إزالة التكرارات: تحويل قائمة إلى مجموعة لحذف العناصر المكررة.

  • التحقق من العلاقات بين مجموعات البيانات: مثل إيجاد القواسم المشتركة أو الفروقات.

  • تسريع عمليات البحث: لأن البحث في المجموعات أسرع من القوائم.


ثالثًا: القواميس (Dictionaries) في بايثون

تعريف القواميس وخصائصها

القاموس هو هيكل بيانات يُستخدم لتخزين أزواج من القيم على شكل مفتاح-قيمة (Key-Value pairs)، وهو يسمح بالوصول إلى القيم عن طريق المفاتيح بدلاً من الفهرس الرقمي كما في القوائم أو الصفوف.

  • يتم إنشاء القواميس باستخدام الأقواس المعقوفة {} مع وضع كل زوج مفتاح وقيمة مفصولين بنقطتين :.

خصائص القواميس

  • مفتاح فريد: كل مفتاح داخل القاموس يجب أن يكون فريدًا.

  • قابلية التعديل: يمكن تعديل، إضافة أو حذف عناصر بسهولة.

  • الترتيب: ابتداءً من بايثون 3.7، تحتفظ القواميس بترتيب الإدخال.

إنشاء القواميس

python
my_dict = {'name': 'علي', 'age': 30, 'city': 'الرياض'} empty_dict = {}

العمليات الأساسية على القواميس

1. الوصول إلى القيم عبر المفاتيح

python
print(my_dict['name']) # علي

2. إضافة أو تعديل العناصر

python
my_dict['age'] = 31 # تعديل العمر my_dict['job'] = 'مهندس' # إضافة وظيفة جديدة

3. حذف العناصر

python
del my_dict['city'] removed_value = my_dict.pop('job') # حذف وإرجاع القيمة

4. التحقق من وجود مفتاح

python
if 'name' in my_dict: print("المفتاح موجود")

5. التكرار عبر القاموس

يمكن التكرار عبر المفاتيح، القيم، أو أزواج المفتاح والقيمة:

python
for key in my_dict: print(key, my_dict[key]) for value in my_dict.values(): print(value) for key, value in my_dict.items(): print(key, value)

مقارنة بين الصفوف، المجموعات، والقواميس

الخاصية الصفوف (Tuples) المجموعات (Sets) القواميس (Dictionaries)
قابلية التعديل غير قابلة للتعديل قابلة للتعديل قابلة للتعديل
ترتيب العناصر مرتبة غير مرتبة مرتبة (من بايثون 3.7)
السماح بالعناصر المكررة تسمح لا تسمح المفاتيح فريدة، القيم تسمح
نوع الوصول عبر الفهرس لا يوجد فهرس عبر المفتاح
الاستخدام النموذجي تخزين بيانات ثابتة تخزين عناصر فريدة تخزين أزواج مفتاح-قيمة

نصائح متقدمة لاستخدام هذه الهياكل بفعالية

1. اختيار الهيكل المناسب للمهمة

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

  • عند التعامل مع مجموعات بيانات تحتاج إلى إزالة التكرارات أو إجراء عمليات تقاطع واتحاد، المجموعات توفر حلولًا مثالية.

  • لتخزين البيانات المرتبطة بمفتاح معين للوصول السريع، القواميس هي الحل الأمثل.

2. استخدام التعبيرات الشرطية مع هذه الهياكل

تتيح بايثون إمكانية التحقق من وجود عنصر أو مفتاح بسهولة باستخدام تعبيرات شرطية:

python
if 'العنصر' in my_set: # تنفيذ العملية if 'key' in my_dict: # تنفيذ العملية

3. استخدام دوال مكتبة collections

يوجد في مكتبة collections أدوات متقدمة تدعم القواميس مثل defaultdict لتفادي أخطاء المفاتيح غير الموجودة، وOrderedDict للحفاظ على ترتيب الإدخال في الإصدارات السابقة لبايثون 3.7.


ملحق: جدول مقارنة تفصيلي بين العمليات على الصفوف والمجموعات والقواميس

العملية الصفوف (Tuples) المجموعات (Sets) القواميس (Dictionaries)
الإنشاء t = (1, 2, 3) s = {1, 2, 3} d = {'a':1, 'b':2}
الإضافة غير ممكن (immutable) s.add(4) d['c'] = 3
الحذف غير ممكن s.remove(2) del d['a']
التكرار for x in t: for x in s: for k,v in d.items():
البحث عن عنصر if x in t: if x in s: if k in d:
التقطيع (Slicing) متاح t[0:2] غير متاح غير متاح
الترتيب محفوظ غير محفوظ محفوظ (من 3.7)

الخلاصة

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


المصادر والمراجع