List وTuple وSet وDictionary هي هياكل بيانات مختلفة في بايثون، والاختيار بينها يعتمد على شكل البيانات وما تريد فعله بها. استخدم List عندما تحتاج عناصر مرتبة وقابلة للتعديل وتسمح بالتكرار، وTuple عندما تحتاج مجموعة مرتبة لا تريد تغيير عناصرها عادةً، وSet عندما تهمك القيم الفريدة ولا تحتاج إلى فهرس رقمي، وDictionary عندما تريد ربط كل قيمة بمفتاح واضح.
الفرق الأهم ليس شكل الأقواس فقط، بل الترتيب، القابلية للتعديل، التكرار، وطريقة الوصول إلى العناصر. في هذا المقال ستقارن الأنواع الأربعة بسرعة، ثم تعرف متى يكون كل نوع هو الاختيار الأنسب دون إعادة شرح جميع الدوال الخاصة به.
{alertInfo} القاعدة السريعة: List للترتيب والتعديل، Tuple لبيانات مرتبة ثابتة نسبيًا، Set للقيم الفريدة، وDictionary لبيانات Key → Value.
{getToc} $title={محتوى المقال}
ما الفرق بين List وTuple وSet وDictionary في بايثون؟
| النوع | الترتيب | قابل للتعديل؟ | التكرار | طريقة الوصول | الاستخدام الأنسب |
|---|---|---|---|---|---|
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 للحصول على العناصر الفريدة:
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 لا تدعم الفهرسة التسلسلية.
مثال واحد يجمع الأنواع الأربعة
يمكن أن تستخدم الأنواع الأربعة في نفس البرنامج، لكن لكل واحد مسؤولية مختلفة:
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 |
ولمزيد من الأمثلة العملية على تعديل القوائم، يمكنك مراجعة الفرق بين 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.




