🐍 ما هي الـ Tuples في بايثون؟ دليل شامل للمبتدئين
اليوم سنتعرف على بنية بيانات مهمة جداً تسمى Tuple (تُنطق "تيوبل" أو "تابل"). إذا كنت تتذكر درس القوائم (Lists)، فستجد أن الـ Tuples تشبهها كثيراً ولكن مع فرق رئيسي واحد مهم جداً! ✨
📦 ما هو الـ Tuple؟
الـ Tuple هو نوع من الحاويات (Containers) في بايثون يستخدم لتخزين مجموعة من العناصر مرتبة حسب ترتيب محدد. تخيله كصندوق صغير يمكنك وضع عدة أشياء بداخله، ولكن بمجرد إغلاقه لا يمكنك تغيير محتوياته!
الخصائص الرئيسية للـ Tuple:
- مرتب (Ordered): العناصر تحتفظ بترتيب إضافتها
- يسمح بالتكرار (Allows duplicates): يمكن أن يحتوي على عناصر مكررة
- غير قابل للتغيير (Immutable): لا يمكن تعديله بعد الإنشاء
🔧 كيفية إنشاء Tuple
لإنشاء tuple، نضع العناصر بين قوسين عاديين () ويفصل بينها بفواصل:
# إنشاء tuple فارغ
empty_tuple = ()
print(empty_tuple) # ()
# إنشاء tuple يحتوي على أرقام
numbers = (1, 2, 3, 4, 5)
print(numbers) # (1, 2, 3, 4, 5)
# إنشاء tuple يحتوي على نصوص
fruits = ("تفاح", "موز", "برتقال")
print(fruits) # ('تفاح', 'موز', 'برتقال')
# إنشاء tuple مختلط
mixed = (1, "نص", 3.14, True)
print(mixed) # (1, 'نص', 3.14, True)
ملاحظة مهمة: إذا كنت تريد إنشاء tuple يحتوي على عنصر واحد فقط، يجب إضافة فاصلة بعد العنصر:
# هذا سيكون مجرد رقم وليس tuple
not_tuple = (5)
print(type(not_tuple)) # <class 'int'>
# هذا هو tuple صحيح بعنصر واحد
correct_tuple = (5,)
print(type(correct_tuple)) # <class 'tuple'>
🔍 الوصول إلى عناصر الـ Tuple
يمكنك الوصول إلى عناصر الـ Tuple باستخدام الفهرس (Index) تماماً مثل القوائم:
# إنشاء tuple
colors = ("أحمر", "أخضر", "أزرق", "أصفر")
# الوصول إلى العنصر الأول (الفهرس 0)
print(colors[0]) # أحمر
# الوصول إلى العنصر الثالث (الفهرس 2)
print(colors[2]) # أزرق
# الوصول إلى العنصر الأخير
print(colors[-1]) # أصفر
# slicing لاستخراج جزء من الـ tuple
print(colors[1:3]) # ('أخضر', 'أزرق')
🔄 ما الفرق بين Tuple و List؟
هذا سؤال مهم جداً! إليك الفروق الرئيسية:
| الميزة | Tuple | List |
|---|---|---|
| القابلية للتغيير | ❌ غير قابل للتغيير (Immutable) | ✅ قابل للتغيير (Mutable) |
| الأقواس المستخدمة | () |
[] |
| الأداء | أسرع في التكرار | أبطأ قليلاً |
| الاستخدام | للبيانات الثابتة | للبيانات المتغيرة |
# مثال يوضح الفرق
my_list = [1, 2, 3]
my_tuple = (1, 2, 3)
# يمكنني تعديل الـ list
my_list[0] = 10 # ✅ يعمل
print(my_list) # [10, 2, 3]
# لا يمكنني تعديل الـ tuple
# my_tuple[0] = 10 # ❌ خطأ! لا يعمل
🛠️ العمليات الأساسية على الـ Tuples
1. التكرار (Looping)
days = ("السبت", "الأحد", "الاثنين")
# التكرار باستخدام for loop
for day in days:
print(day)
2. التحقق من وجود عنصر
fruits = ("تفاح", "موز", "برتقال")
# التحقق إذا كان العنصر موجوداً
print("تفاح" in fruits) # True
print("فراولة" in fruits) # False
3. دمج الـ Tuples
tuple1 = (1, 2, 3)
tuple2 = ("a", "b", "c")
# دمج الـ tuples
combined = tuple1 + tuple2
print(combined) # (1, 2, 3, 'a', 'b', 'c')
4. تكرير الـ Tuple
numbers = (1, 2)
repeated = numbers * 3
print(repeated) # (1, 2, 1, 2, 1, 2)
📊 الطول والعد
# معرفة عدد العناصر
students = ("أحمد", "فاطمة", "محمد", "زينب")
print(len(students)) # 4
# عد تكرار عنصر معين
numbers = (1, 2, 3, 2, 1, 2)
print(numbers.count(2)) # 3 (الرقم 2 يتكرر 3 مرات)
# معرفة موقع عنصر
print(numbers.index(3)) # 2 (الرقم 3 موجود في الفهرس 2)
🎯 متى نستخدم الـ Tuples؟
- للبيانات الثابتة التي لا تتغير (مثل أيام الأسبوع، أشهر السنة)
- كلمات المرور أو البيانات الحساسة التي لا نريد تعديلها
- كإرجاع للدوال عندما نريد إرجاع أكثر من قيمة
- كأساس للـ Dictionaries (سنتعلمها لاحقاً)
# مثال: إرجاع أكثر من قيمة من دالة
def get_student_info():
name = "أحمد"
age = 20
grade = "A"
return name, age, grade # هذا سيعود كـ tuple
student_info = get_student_info()
print(student_info) # ('أحمد', 20, 'A')
💡 نصائح عملية
- استخدم الـ Tuples عندما تعلم أن البيانات لن تتغير
- الـ Tuples أكثر أماناً من الـ Lists للبيانات الثابتة
- يمكنك تحويل الـ List إلى Tuple والعكس
- الـ Tuples أسرع في المعالجة من الـ Lists
# تحويل بين list و tuple
my_list = [1, 2, 3]
my_tuple = tuple(my_list) # تحويل list إلى tuple
new_list = list(my_tuple) # تحويل tuple إلى list
🎓 اختبر نفسك
السؤال 1 من 30% أكملت
ما هي الخاصية الرئيسية التي تميز الـ Tuple عن الـ List في بايثون؟
آخر تحديث: ٢٢ مارس ٢٠٢٦
التعليقات
شاركنا رأيك أو أسئلتك حول هذا المقال
جاري تحميل التعليقات...