الفرق بين List وTuple وSet وDictionary في بايثون: متى تستخدم كل نوع؟

الفرق بين List و Tuple و Set و Dictionary في بايثون للمبتدئين مع توضيح استخدام كل نوع

List وTuple وSet وDictionary هي هياكل بيانات مختلفة في بايثون، والاختيار بينها يعتمد على شكل البيانات وما تريد فعله بها. استخدم List عندما تحتاج عناصر مرتبة وقابلة للتعديل وتسمح بالتكرار، وTuple عندما تحتاج مجموعة مرتبة لا تريد تغيير عناصرها عادةً، وSet عندما تهمك القيم الفريدة ولا تحتاج إلى فهرس رقمي، وDictionary عندما تريد ربط كل قيمة بمفتاح واضح.

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

{alertInfo} القاعدة السريعة: List للترتيب والتعديل، Tuple لبيانات مرتبة ثابتة نسبيًا، Set للقيم الفريدة، وDictionary لبيانات Key → Value.

{getToc} $title={محتوى المقال}

ما الفرق بين List وTuple وSet وDictionary في بايثون؟

مقارنة بين List و Tuple و Set و Dictionary في Python من حيث الترتيب والتعديل والتكرار
النوع الترتيب قابل للتعديل؟ التكرار طريقة الوصول الاستخدام الأنسب
List مرتبة نعم مسموح Index عناصر مرتبة تتغير مع الوقت
Tuple مرتبة لا، عناصر الـTuple نفسها لا تُستبدل أو تُحذف مباشرة مسموح Index مجموعة قيم مترابطة لا تحتاج إلى تعديلها عادةً
Set لا توفر ترتيبًا تسلسليًا يمكن الاعتماد عليه نعم لا تحتفظ بالعناصر المكررة لا يوجد Index تقليدي القيم الفريدة واختبار وجود عنصر
Dictionary يحافظ على ترتيب الإدخال في بايثون الحديثة نعم المفاتيح فريدة، والقيم قد تتكرر باستخدام Key ربط كل قيمة باسم أو مفتاح واضح

إذا حفظت هذا الجدول كفكرة لا كنص، ستتجنب معظم الحيرة: اسأل أولًا هل تحتاج ترتيبًا؟ تعديلًا؟ منع تكرار؟ أم علاقة Key → Value؟ وإذا كانت هذه الأنواع جديدة عليك، ابدأ بـشرح أنواع البيانات في بايثون ثم عد للمقارنة.

متى تستخدم كل نوع؟

  • استخدم List عندما تحتاج مجموعة مرتبة تستطيع إضافة عناصر إليها أو حذفها أو تعديلها، مثل قائمة مهام أو أسماء منتجات.
  • استخدم Tuple عندما تمثل مجموعة قيم مرتبطة ببعضها ولا تحتاج عادةً إلى تغيير عناصرها، مثل إحداثيات نقطة (x, y).
  • استخدم Set عندما تريد عناصر فريدة أو عندما تكرر سؤال: «هل هذا العنصر موجود؟» ولا تحتاج إلى الوصول بواسطة رقم فهرس.
  • استخدم Dictionary عندما تكون البيانات على شكل خصائص واضحة، مثل name وage لمستخدم واحد.

List في بايثون: مرتبة وقابلة للتعديل

الـList مناسبة عندما يهمك ترتيب العناصر وتحتاج إلى تعديل المجموعة لاحقًا. تسمح بالقيم المكررة ويمكن الوصول إلى عناصرها باستخدام Index.

numbers = [10, 20, 20, 30]

print(numbers[0])

الناتج:

10

للتفاصيل عن الإضافة والحذف والفهرسة، راجع شرح القوائم Lists في بايثون.

Tuple في بايثون: مرتبة وغير قابلة لتعديل عناصرها مباشرة

الـTuple مرتبة وتسمح بالتكرار ويمكن الوصول إلى عناصرها بالـIndex، لكنها Immutable: لا يمكنك استبدال عنصر أو حذفه منها مباشرة بعد الإنشاء.

point = (10, 20)

print(point[0])

الناتج:

10
{alertInfo} إذا كانت Tuple تحتوي داخلها كائنًا قابلًا للتعديل مثل List، فقد يتغير ذلك الكائن نفسه؛ المقصود بـImmutable أن بنية الـTuple وعناصرها المباشرة لا تُستبدل بالطريقة المعتادة.

وعند إنشاء Tuple من عنصر واحد، الفاصلة هي المهمة:

value = (5,)

print(type(value))

للتفاصيل، راجع شرح Tuple في بايثون والفرق بينها وبين List.

Set في بايثون: عناصر فريدة بدون Index تقليدي

الـSet تحتفظ بعناصر فريدة ولا توفر ترتيبًا تسلسليًا أو فهرسة مثل List وTuple. لذلك لا تعتمد على ترتيب ظهور عناصرها، ولا تكتب مثلًا my_set[0].

numbers = {10, 20, 20, 30}

print(20 in numbers)
print(len(numbers))

الناتج:

True
3
صورة توضح أن Set في Python تمنع تكرار العناصر مثل apple و banana و cherry

من الاستخدامات العملية تحويل قائمة تحتوي على تكرارات إلى Set للحصول على العناصر الفريدة:

numbers = [1, 1, 2, 3, 3]
unique_numbers = set(numbers)

print(len(unique_numbers))
{alertWarning} الأقواس الفارغة {} تنشئ Dictionary فارغة، وليست Set فارغة. لإنشاء Set فارغة استخدم set().

ماذا لو أردت إزالة التكرار مع الحفاظ على ترتيب العناصر؟

لا تستخدم list(set(items)) إذا كان ترتيب الظهور مهمًا؛ فالـSet لا تضمنه. مع العناصر القابلة للـHash مثل النصوص والأرقام، يمكنك الاستفادة من ترتيب مفاتيح القاموس في بايثون الحديثة:

items = ["apple", "banana", "apple"]
unique = list(dict.fromkeys(items))
print(unique)

الناتج: ['apple', 'banana']. هذه حالة تجمع بين فرادة العناصر وترتيب ظهورها الأول. أما إن كانت العناصر غير قابلة للـHash، فستحتاج طريقة أخرى للتخلص من التكرار.

للتفاصيل، راجع شرح Set في بايثون للمبتدئين.

Dictionary في بايثون: بيانات Key وValue

الـDictionary تخزن البيانات على شكل أزواج Key: Value. المفاتيح يجب أن تكون فريدة، بينما يمكن أن تتكرر القيم. والوصول المعتاد يكون بالمفتاح لا بالـIndex الرقمي.

user = {
    "name": "Ali",
    "age": 25
}

print(user["name"])

الناتج:

Ali

منذ بايثون 3.7، الحفاظ على ترتيب إدخال المفاتيح سلوك مضمون في اللغة. ومع ذلك، تظل الوظيفة الأساسية للـDictionary هي ربط Key بقيمة، وليس التعامل معها كقائمة ذات فهارس رقمية.

يجب أن يكون الـKey قابلًا للـHash مثل String أو رقم أو Tuple مناسبة. وبالمثل، عناصر Set يجب أن تكون Hashable.

للتفاصيل، راجع شرح Dictionary في بايثون للمبتدئين.

الفرق في الشكل والوصول بسرعة

my_list = [1, 2, 3]
my_tuple = (1, 2, 3)
my_set = {1, 2, 3}
my_dict = {"a": 1, "b": 2}

print(my_list[0])
print(my_tuple[0])
print(my_dict["a"])

لم نستخدم my_set[0] لأن Set لا تدعم الفهرسة التسلسلية.

جدول مقارنة مصغر بين List و Tuple و Set و Dictionary في Python للمبتدئين

مثال واحد يجمع الأنواع الأربعة

يمكن أن تستخدم الأنواع الأربعة في نفس البرنامج، لكن لكل واحد مسؤولية مختلفة:

skills = ["Python", "HTML", "CSS"]
birth_date = (2005, 7, 15)
unique_courses = {"Python", "HTML", "Python"}

student = {
    "name": "Ali",
    "skills": skills,
    "birth_date": birth_date,
    "courses": unique_courses
}

print(student["name"])

هنا كانت List مناسبة للمهارات القابلة للتغيير، وTuple لتاريخ الميلاد، وSet لمنع تكرار الدورات، وDictionary لجمع خصائص الطالب تحت مفاتيح واضحة.

أخطاء شائعة عند اختيار النوع

  • استخدام {} كـSet فارغة: هذه Dictionary؛ استخدم set() للـSet الفارغة.
  • محاولة الوصول إلى Set بالـIndex: لا يوجد my_set[0] مثل List.
  • الاعتماد على ترتيب Set: لا تستخدم Set عندما يكون تسلسل العناصر جزءًا من معنى البيانات.
  • محاولة تعديل عنصر داخل Tuple: إذا كنت تحتاج تعديل العناصر باستمرار، فغالبًا List أنسب.
  • الاعتقاد أن Dictionary تمنع تكرار القيم: الفريد هو المفتاح Key؛ القيم يمكن أن تتكرر.
  • استخدام Dictionary دون حاجة: إذا كانت البيانات مجرد سلسلة عناصر مرتبة، فقد تكون List أبسط.

كيف تختار بسرعة؟

إذا كنت تحتاج... استخدم
عناصر مرتبة وقابلة للتعديل List
مجموعة قيم مرتبة لا تحتاج إلى تعديل عناصرها عادةً Tuple
عناصر فريدة واختبار وجود عنصر دون Index Set
ربط أسماء أو مفاتيح بقيم Dictionary
دليل سريع يوضح متى تستخدم List أو Tuple أو Set أو Dictionary في Python حسب نوع البيانات المطلوبة

ولمزيد من الأمثلة العملية على تعديل القوائم، يمكنك مراجعة الفرق بين append وextend في بايثون.

أسئلة شائعة

ما الفرق بين List وTuple؟

كلتاهما مرتبتان وتسمحان بالتكرار والوصول بالـIndex، لكن List قابلة للتعديل، بينما لا يمكن استبدال أو حذف عناصر Tuple مباشرة بعد إنشائها.

هل Set تحتفظ بالترتيب؟

لا تعتمد على Set كحاوية ذات ترتيب تسلسلي؛ فهي لا تسجل مواضع العناصر أو ترتيب الإدخال بالطريقة التي تفعلها List وTuple، ولا تدعم الفهرسة.

هل Dictionary تسمح بالقيم المكررة؟

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

ما أفضل نوع بيانات في بايثون؟

لا يوجد نوع أفضل دائمًا. اختر List للترتيب والتعديل، Tuple للقيم المرتبة التي لا تحتاج تغييرها، Set للعناصر الفريدة، وDictionary لعلاقة Key وValue.

مصادر رسمية للتوسع

الخلاصة

الفرق بين List وTuple وSet وDictionary هو فرق في طريقة تنظيم البيانات واستخدامها، وليس في شكل الأقواس فقط. حدد أولًا هل تحتاج ترتيبًا أو تعديلًا أو عناصر فريدة أو مفاتيح، ثم اختر البنية التي تطابق هذه الحاجة.

{alertSuccess} الخلاصة العملية: List = ترتيب + تعديل، Tuple = ترتيب + ثبات بنية المجموعة، Set = عناصر فريدة، Dictionary = Key → Value.

إرسال تعليق

أحدث أقدم