الجلسة التطبيقية 5: القوائم وقابلية التغيير
الجلسة التطبيقية 5 (Recitation 5)
المصادر والنسبة والترخيص
المادة الأصلية: آنا بيل (Ana Bell)، MIT OpenCourseWare (MIT OCW)، معهد ماساتشوستس للتكنولوجيا، مقرر 6.100L: مقدمة في علوم الحاسوب والبرمجة باستخدام Python، خريف 2022 (Fall 2022).
هذه ترجمة وتكييف عربي غير رسمي وفق رخصة CC BY-NC-SA 4.0: النسبة–غير التجاري–المشاركة بالمثل، ولا تعني اعتمادًا أو تأييدًا من MIT أو MIT OCW. شروط الاستخدام والاستشهاد.
منهج الترجمة: لكل عنوان في الملخّص الأصلي عنوان مستقل، وحُفظ ترتيب العناوين والمحاور والتذكيرات والأمثلة كما في الأصل. الشيفرة محفوظة بالإنجليزية، ولم تُترجَم أسماء الدوال ولا الكلمات المفتاحية ولا أسماء المتغيّرات. لم تُضمَّن صور.
ملاحظة المترجم: المصدر ملف Word. فقد استخراج النصّ المسافات البادئة التي تدلّ على القوائم، فحُذفت. وعوّضت علامات التنصيص المنحنية « “ ” » و« ‘ ’ » وشرطة الطرح « – » بعلامات ASCII حتى تعمل الشيفرة كما كُتبت، وأُبقيت الأخطاء الواردة في الأصل كما هي.
المحاضرة المرتبطة
تُرافق هذه الجلسة التطبيقية المحاضرة 10: القوائم وقابلية التغيير (Lists, Mutability). ويعرض ملخّصها مراجعةً مشتركة للمحاضرتين 9 و10 في القوائم (Lists) والصفوف (Tuples) وقابلية التغيير (Mutability).
تذكيرات (Reminders)
6.100L، الجلسة التطبيقية 5 — 14 أكتوبر 2022.
- مسابقة MQ5 يوم الاثنين 10/17.
- مجموعة المسائل PS2 مستحقّة الأربعاء 10/19.
- تذكّر بإكمال مناقشة الكود (checkoff).
مراجعة المحاضرتين 9 و10: القوائم، والصفوف، وقابلية التغيير
الصفوف (Tuples)
- هذه تسلسلات مرتّبة من الكائنات، ويمكن أن تكون هذه الكائنات من أي نوع.
- غير قابلة للتغيير (immutable)، أي لا يمكن تغييرها بعد إنشائها.
- يمكن فهرستها.
- قابلة للتكرار (Iterable) — أي يمكن المرور عليها في حلقة.
- يمكن تقطيع صفّ فتُعطيك مجموعة جزئية من الصفّ الأصلي.
tuple1 = (1, 2, 3, 4)
len(tuple1) # gives you the length of the tuple
tuple1[0:2] # gives (1,2)
- كثيرًا ما تُعيد الدوال صفوفًا طريقةً لإعادة عدّة قيم دفعة واحدة.
Return a, b— آخر سطر في الدالة، حيثa, bهو الصفّ(a, b).
القوائم (Lists)
- تسلسل مرتّب من الكائنات.
- يمكن فهرستها وتقطيعها على نحو مشابه للصفوف.
- قابلة للتكرار (Iterable) — أي يمكن المرور عليها في حلقة.
- قابلة للتغيير (mutable)، أي يمكن تغييرها أو تعديلها بعد إنشائها.
- على سبيل المثال، خذ القائمتين التاليتين:
list1 = [1,2,3, "MIT"]
list2 = [4,5,6]
- يمكنك تغيير العنصر عند الفهرس 0 بـ:
list1[0] = 5
- إضافة عنصر إلى النهاية:
list1.append(5)
- إضافة كلّ عناصر
list2إلى نهايةlist1بـ:
list1.extend(list2)
- إزالة عنصر عند فهرس معيّن بـ:
del list1[index]
- إزالة العنصر في النهاية:
list1.pop()
- إزالة عنصر معيّن بـ:
list1.remove("MIT")
- لاحظ أنّه إذا ظهر عنصر عدّة مرّات، فإنّ هذه الطريقة تزيل أول ظهور لذلك العنصر فقط.
- وإذا لم يكن العنصر موجودًا، فإنّها ترمي خطأً.
طرائق مفيدة (Useful Methods)
my_list.copy() # no mutation - returns copy
my_list.reverse() # mutation
sorted(my_list) # no mutation - returns sorted list
my_list.sort() # mutation
my_list.extend([x,y]) # mutation
my_list[:] # makes clone
my_list.remove(2) # removes the first occurance of 2 in the list
my_list.pop() # pops last element - mutation
my_list.pop(2) # pops 3rd element
my_list.insert(1, 7) # inserts 7 in the 2nd position - mutation
بنى البيانات غير القابلة للتغيير مقابل القابلة للتغيير
أنواع البيانات غير القابلة للتغيير: لا يمكن تغيير قيمة العنصر بعد الإسناد.
أمثلة على أنواع البيانات غير القابلة للتغيير التي رأيناها:
intfloatboolstringtuple
أنواع البيانات القابلة للتغيير: يمكن تغيير العنصر بعد الإسناد.
- يمكننا التفكير في الكائنات القابلة للتغيير على أنّها مُسنَدة إلى موضع معيّن في الذاكرة. في هذه الحالة، إسناد متغيّر إلى كائن قابل للتغيير يعني مجرّدًا أنّه يشير إلى ذلك الكائن في الذاكرة.
- يمكن لعدّة متغيّرات أن تشير إلى الكائن نفسه في الذاكرة. وقد يكون هذا مُربكًا لأنّ تغيير متغيّر سيؤثّر في المتغيّرات الأخرى التي تشير إليه. يسمّى هذا التشارك بالاسم (aliasing).
أمثلة على أنواع البيانات القابلة للتغيير التي رأيناها:
- lists
- Dictionaries (have not seen)