بعد أن تعلمنا في الدرس السابق من سلسلة أساسيات بايثون مفهوم القوائم Lists وكيف نستخدمها لتخزين عدة عناصر داخل متغير واحد، ننتقل الآن إلى نوع قريب جدًا منها وهو Tuples في Python.
قد تبدو Tuple في البداية مثل List، لأنها أيضًا تخزن أكثر من قيمة داخل متغير واحد، ويمكنك الوصول إلى عناصرها باستخدام الفهرس index. لكن الفرق المهم أن Tuple ثابتة ولا يمكن تعديل عناصرها مباشرة بعد إنشائها، بينما القائمة List قابلة للتعديل.
في هذا الدرس من بايثون العرب سنشرح معنى Tuple في بايثون، وكيف تنشئها، وكيف تصل إلى عناصرها، وما الفرق بينها وبين List، ومتى تستخدم كل نوع بطريقة سهلة ومناسبة للمبتدئين.
{getToc} $title={محتوى المقال}
{alertInfo} فكر في Tuple كأنها قائمة ثابتة: تخزن عدة عناصر، لكن لا تريد تغييرها بعد إنشائها.
ما هي Tuple في بايثون؟
الـ Tuple هي نوع بيانات في Python يستخدم لتخزين عدة عناصر داخل متغير واحد. غالبًا تكتب عناصر Tuple بين أقواس دائرية ()، وتفصل بين العناصر باستخدام الفواصل.
مثال بسيط:
colors = ("red", "green", "blue")
print(colors)
الناتج:
('red', 'green', 'blue')
في هذا المثال، المتغير colors يحتوي على ثلاث قيم داخل Tuple واحدة. ويمكن أن تحتوي Tuple على نصوص، أرقام، قيم منطقية، أو حتى أنواع بيانات مختلفة داخل نفس المجموعة.
لماذا نستخدم Tuple في Python؟
نستخدم Tuple عندما نريد تخزين مجموعة عناصر، لكن لا نحتاج إلى تعديلها لاحقًا. بمعنى آخر: البيانات تكون ثابتة أو نريد حمايتها من التغيير غير المقصود أثناء كتابة البرنامج.
أمثلة على أشياء مناسبة لاستخدام Tuple:
- إحداثيات نقطة مثل
(10, 20). - أبعاد صورة مثل
(1200, 800). - ألوان ثابتة في البرنامج.
- بيانات لا تريد تغيير ترتيبها أو قيمها.
- إرجاع أكثر من قيمة من دالة.
- تخزين إعدادات بسيطة وثابتة.
{alertSuccess} استخدم Tuple عندما تكون البيانات ثابتة ولا تريد تعديلها بالخطأ أثناء كتابة البرنامج.
كيف تنشئ Tuple في بايثون؟
أسهل طريقة لإنشاء Tuple هي كتابة العناصر بين أقواس دائرية:
numbers = (10, 20, 30)
print(numbers)
ويمكنك إنشاء Tuple من نصوص:
days = ("Saturday", "Sunday", "Monday")
print(days)
ويمكن أيضًا إنشاء Tuple بدون أقواس، لكن للمبتدئ الأفضل استخدام الأقواس حتى يكون الكود واضحًا:
point = 10, 20
print(point)
الناتج:
(10, 20)
إنشاء Tuple تحتوي على عنصر واحد
هذه نقطة مهمة جدًا للمبتدئين. إذا أردت إنشاء Tuple تحتوي على عنصر واحد فقط، يجب وضع فاصلة بعد العنصر.
مثال خاطئ:
item = ("Python")
print(type(item))
الناتج:
<class 'str'>
هنا Python اعتبرها نصًا عاديًا وليس Tuple، لأن الأقواس وحدها لا تكفي في حالة العنصر الواحد.
الحل الصحيح:
item = ("Python",)
print(type(item))
الناتج:
<class 'tuple'>
{alertWarning} عند إنشاء Tuple من عنصر واحد، الفاصلة مهمة جدًا: اكتب ("Python",) وليس ("Python").
الوصول إلى عناصر Tuple باستخدام index
مثل القوائم تمامًا، يمكن الوصول إلى عناصر Tuple باستخدام الفهرس index. ويبدأ الفهرس في Python من الرقم 0.
colors = ("red", "green", "blue")
print(colors[0])
print(colors[1])
print(colors[2])
الناتج:
red
green
blue
لاحظ أن:
colors[0]تعني العنصر الأول.colors[1]تعني العنصر الثاني.colors[2]تعني العنصر الثالث.
استخدام الفهرس السالب مع Tuple
يمكنك استخدام الفهرس السالب للوصول إلى العناصر من النهاية. الرقم -1 يعني آخر عنصر، والرقم -2 يعني العنصر قبل الأخير.
colors = ("red", "green", "blue")
print(colors[-1])
print(colors[-2])
الناتج:
blue
green
هل يمكن تعديل عناصر Tuple؟
لا. هذه هي الفكرة الأساسية في Tuple. بعد إنشائها لا يمكنك تغيير عنصر داخلها مباشرة.
مثال خاطئ:
colors = ("red", "green", "blue")
colors[0] = "black"
سيظهر خطأ لأن Tuple لا تسمح بتعديل عناصرها بعد الإنشاء. إذا كنت تحتاج إلى تعديل العناصر، استخدم List بدل Tuple.
{alertInfo} الفرق الأهم: List قابلة للتعديل، أما Tuple ثابتة ولا يمكن تعديل عناصرها مباشرة.
معرفة عدد عناصر Tuple باستخدام len
يمكنك استخدام الدالة len() لمعرفة عدد عناصر Tuple.
days = ("Saturday", "Sunday", "Monday")
print(len(days))
الناتج:
3
المرور على عناصر Tuple باستخدام for loop
يمكنك المرور على عناصر Tuple باستخدام حلقة for مثل القوائم.
languages = ("Python", "JavaScript", "PHP")
for language in languages:
print(language)
الناتج:
Python
JavaScript
PHP
تقطيع Tuple باستخدام Slicing
يمكنك أخذ جزء من Tuple باستخدام slicing، مثلما نفعل مع القوائم. هذه الطريقة مفيدة عندما تريد استخراج جزء من البيانات بدون تغيير Tuple الأصلية.
numbers = (10, 20, 30, 40, 50)
print(numbers[1:4])
الناتج:
(20, 30, 40)
هنا بدأنا من الفهرس 1 وتوقفنا قبل الفهرس 4.
الفرق بين List و Tuple في Python
الآن وصلنا لأهم جزء في الدرس: ما الفرق بين List و Tuple؟
| المقارنة | List | Tuple |
|---|---|---|
| طريقة الكتابة | [1, 2, 3] |
(1, 2, 3) |
| القابلية للتعديل | يمكن تعديلها | لا يمكن تعديلها مباشرة |
| الإضافة والحذف | تدعم append و remove و pop | لا تدعم الإضافة والحذف المباشر |
| الاستخدام المناسب | بيانات تتغير | بيانات ثابتة |
| الوصول بالفهرس | نعم | نعم |
| المرور باستخدام for | نعم | نعم |
مثال يوضح الفرق عمليًا
القائمة يمكن تعديلها:
names = ["Ali", "Sara", "Omar"]
names[0] = "Ahmed"
print(names)
الناتج:
['Ahmed', 'Sara', 'Omar']
أما Tuple فلا يمكن تعديلها بنفس الطريقة:
names = ("Ali", "Sara", "Omar")
names[0] = "Ahmed"
هذا سيؤدي إلى خطأ لأن Tuple ثابتة.
هل يمكن تحويل Tuple إلى List؟
نعم، إذا احتجت إلى تعديل Tuple، يمكنك تحويلها مؤقتًا إلى List، ثم تعديلها، ثم تحويلها مرة أخرى إلى Tuple.
colors = ("red", "green", "blue")
colors_list = list(colors)
colors_list[0] = "black"
colors = tuple(colors_list)
print(colors)
الناتج:
('black', 'green', 'blue')
لكن انتبه: إذا كنت تحتاج إلى التعديل كثيرًا، فالأفضل من البداية استخدام List بدل Tuple.
إرجاع أكثر من قيمة من دالة باستخدام Tuple
من الاستخدامات المهمة في بايثون أن الدالة تستطيع إرجاع أكثر من قيمة، وغالبًا يتم التعامل مع الناتج كـ Tuple.
def get_user():
return "Ahmed", 25
user = get_user()
print(user)
الناتج:
('Ahmed', 25)
ويمكنك استقبال القيم مباشرة في متغيرين:
name, age = get_user()
print(name)
print(age)
الناتج:
Ahmed
25
{alertInfo} عندما ترجع الدالة أكثر من قيمة في بايثون، يمكنك التعامل مع الناتج كأنه Tuple.
Unpacking في Tuple
كلمة Unpacking تعني تفكيك عناصر Tuple وتخزينها في متغيرات منفصلة. هذه الطريقة تجعل الكود أوضح عندما تكون القيم معروفة ومحددة.
point = (10, 20)
x, y = point
print(x)
print(y)
الناتج:
10
20
لكن يجب أن يكون عدد المتغيرات مساويًا لعدد عناصر Tuple.
مثال خاطئ:
point = (10, 20, 30)
x, y = point
هنا يوجد 3 عناصر، لكننا وضعنا متغيرين فقط، لذلك سيظهر خطأ.
أهم دوال Tuple في بايثون
بما أن Tuple ثابتة، فهي لا تحتوي على دوال كثيرة مثل List. لكن هناك دالتان مهمتان جدًا:
| الدالة | وظيفتها | مثال |
|---|---|---|
count() |
تحسب كم مرة تكررت قيمة معينة | items.count("Python") |
index() |
تعطيك فهرس أول ظهور لقيمة معينة | items.index("Python") |
مثال على count
numbers = (1, 2, 2, 3, 2)
print(numbers.count(2))
الناتج:
3
مثال على index
languages = ("HTML", "Python", "CSS")
print(languages.index("Python"))
الناتج:
1
متى أستخدم Tuple بدل List؟
استخدم Tuple عندما تكون البيانات ثابتة أو تريد حماية القيم من التعديل غير المقصود.
أمثلة مناسبة:
- إحداثيات نقطة:
(x, y) - مقاسات ثابتة:
(width, height) - ألوان ثابتة:
("red", "green", "blue") - إرجاع أكثر من قيمة من دالة.
- بيانات مرجعية لا تريد تغييرها أثناء تنفيذ البرنامج.
واستخدم List عندما تريد إضافة أو حذف أو تعديل العناصر باستمرار.
أخطاء شائعة عند استخدام Tuple
1. محاولة تعديل عنصر داخل Tuple
هذا من أشهر الأخطاء:
items = ("A", "B", "C")
items[0] = "X"
الحل: استخدم List إذا كنت تريد تعديل العناصر.
2. نسيان الفاصلة في Tuple من عنصر واحد
اكتب:
item = ("Python",)
ولا تكتب:
item = ("Python")
3. الخلط بين الأقواس المربعة والدائرية
القائمة تستخدم أقواسًا مربعة:
my_list = [1, 2, 3]
أما Tuple فتستخدم غالبًا أقواسًا دائرية:
my_tuple = (1, 2, 3)
مثال تطبيقي بسيط
لنفترض أن لدينا موقعًا ونريد تخزين أبعاد صورة ثابتة:
image_size = (1200, 800)
width, height = image_size
print("العرض:", width)
print("الارتفاع:", height)
الناتج:
العرض: 1200
الارتفاع: 800
هنا استخدام Tuple مناسب لأن أبعاد الصورة غالبًا بيانات ثابتة نريد قراءتها فقط، وليس تعديلها في كل مرة.
أسئلة شائعة
ما معنى Tuple في بايثون؟
Tuple هي نوع بيانات يستخدم لتخزين عدة عناصر داخل متغير واحد، وغالبًا تكتب باستخدام الأقواس الدائرية ().
ما الفرق بين Tuple و List؟
الفرق الأساسي أن List قابلة للتعديل، بينما Tuple ثابتة ولا يمكن تعديل عناصرها مباشرة بعد إنشائها.
هل يمكن الوصول إلى عناصر Tuple باستخدام index؟
نعم، يمكنك الوصول إلى عناصر Tuple باستخدام الفهرس مثل items[0]، ويبدأ الفهرس في Python من صفر.
هل يمكن تحويل Tuple إلى List؟
نعم، يمكنك استخدام list() لتحويل Tuple إلى List، ثم استخدام tuple() لإعادتها إلى Tuple بعد التعديل.
متى أستخدم Tuple؟
استخدم Tuple عندما تكون البيانات ثابتة ولا تريد تعديلها، مثل الإحداثيات، الأبعاد، أو القيم التي ترجع من دالة.
روابط مهمة من بايثون العرب
- أساسيات بايثون 16: شرح القوائم Lists في Python للمبتدئين بالأمثلة
- الفرق بين append و extend في بايثون
- بايثون بالمثال: جمع عناصر قائمة في Python
- حل مشكلة list object has no attribute lower في بايثون
- أساسيات بايثون 15: شرح Scope والمتغيرات المحلية والعامة
مصدر خارجي مفيد
الخلاصة
تعلمنا في هذا الدرس أن Tuple في بايثون تشبه القائمة List من حيث أنها تخزن عدة عناصر داخل متغير واحد، ويمكن الوصول إلى عناصرها باستخدام الفهرس والمرور عليها باستخدام for loop.
لكن الفرق الأساسي أن List قابلة للتعديل، بينما Tuple ثابتة ولا يمكن تعديل عناصرها مباشرة. لذلك استخدم List عندما تحتاج إلى إضافة أو حذف أو تعديل العناصر، واستخدم Tuple عندما تكون البيانات ثابتة وتريد الحفاظ عليها من التغيير.
{alertSuccess} القاعدة الذهبية: إذا كانت البيانات ستتغير استخدم List، وإذا كانت ثابتة استخدم Tuple.