تخطَّ إلى المحتوى

الصفوف والمجموعات في Python (Tuples و Sets)

الدرس 12 من 25 · Python

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

الصف يشبه القائمة، لكنه ثابت: بعد إنشائه لا يمكنك تعديله أو الإضافة إليه أو الحذف منه. يُكتب بين قوسين عاديين ( ):

point = (3, 5)
print(point)
print(point[0])
الناتج
(3, 5)
3

الوصول إلى العناصر يتم بالفهرس تماماً مثل القوائم. لكن جرّب أن تعدّل:

point[0] = 10
الناتج
TypeError: 'tuple' object does not support item assignment

تخيّل الصف مثل تاريخ ميلادك المكتوب في شهادة الميلاد: اليوم والشهر والسنة مرتبطة ببعضها، ولا يجب أن يتغير أي منها أبداً.

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

يمكنك توزيع عناصر الصف على عدة متغيرات في سطر واحد:

point = (3, 5)
x, y = point
print(x, y)
الناتج
3 5

ومن أجمل استخداماته تبديل قيمتي متغيرين بدون متغير ثالث:

a, b = 1, 2
a, b = b, a
print(a, b)
الناتج
2 1

المجموعة تحتوي على عناصر فريدة، أي لا تقبل التكرار، وليس لها ترتيب ثابت. تُكتب بين قوسين معقوفين { }:

nums = {3, 1, 2, 3, 1}
print(nums)
الناتج
{1, 2, 3}

كتبنا خمسة أرقام، لكن المجموعة احتفظت بثلاثة فقط، لأنها تحذف المكرر تلقائياً.

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

nums = {1, 2, 3}
nums.add(4)
print(nums)
nums.discard(1)
print(nums)
print(2 in nums)
الناتج
{1, 2, 3, 4}
{2, 3, 4}
True

البحث بـ in في المجموعة سريع جداً، حتى لو كان فيها ملايين العناصر.

استخدام شائع: حذف المكرر من قائمة

Section titled “استخدام شائع: حذف المكرر من قائمة”
grades = [90, 85, 90, 70, 85]
print(set(grades))
print(len(set(grades)))
الناتج
{90, 85, 70}
3

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

مثل المجموعات في الرياضيات تماماً:

a = {1, 2, 3}
b = {2, 3, 4}
print(a | b) # الاتحاد: كل العناصر
print(a & b) # التقاطع: المشترك
print(a - b) # الفرق: في a وليس في b
الناتج
{1, 2, 3, 4}
{2, 3}
{1}

مثال من الحياة: إذا كانت a أصدقاءك و b أصدقاء أخيك، فإن a & b هم الأصدقاء المشتركون بينكما.

القائمة list الصف tuple المجموعة set
الكتابة [1, 2] (1, 2) {1, 2}
مرتبة؟ نعم نعم لا
قابلة للتعديل؟ نعم لا نعم (إضافة وحذف)
تقبل التكرار؟ نعم نعم لا

عندك قائمتان بأسماء طلاب اشتركوا في نشاطين:

football = ["علي", "عمر", "سارة", "علي"]
chess = ["سارة", "منى", "عمر"]

اكتب برنامجاً يطبع: عدد الطلاب المختلفين في كرة القدم، والطلاب المشتركين في النشاطين، وكل الطلاب بدون تكرار. (ترتيب الأسماء داخل المجموعة قد يختلف عندك).

  • محاولة تعديل صف: تسبب TypeError. إذا احتجت التعديل، استخدم قائمة.
  • استخدام {} لمجموعة فارغة: تنشئ قاموساً. استخدم set().
  • الاعتماد على ترتيب المجموعة: المجموعة بلا ترتيب. إذا احتجت ترتيباً، حوّلها لقائمة واستخدم sorted().

سؤال

ما ناتج len({5, 5, 6, 6, 6})؟

سؤال

أي نوع لا يمكن تعديله بعد إنشائه؟

  • الصف ( ) مثل القائمة لكنه ثابت لا يتغير، ومفيد لحماية البيانات.
  • فك الصف x, y = point يوزع عناصره على متغيرات، ويبدّل القيم بسهولة.
  • المجموعة { } لا تقبل التكرار وليس لها ترتيب.
  • set(قائمة) تحذف المكرر، و | و & و - لعمليات الاتحاد والتقاطع والفرق.
  • المجموعة الفارغة تُنشأ بـ set() وليس {}.