دوال وأساليب القوائم الأساسية
لنراجع طرق التعامل مع القوائم. افترض أن لدينا nums = [1, 2, 3]. يمكنك استخدام:
append: لإضافة عنصر إلى نهاية القائمة.nums.append(4)تغيّر القائمة إلى[1, 2, 3, 4].len: تُرجع عدد العناصر.len(nums)تساوي3.range: التعبيرrange(n)كائن يشبه قائمة الأعداد من0إلىn - 1، أي يحتوي علىnأعداد. ولذلكrange(len(nums))تشبه[0, 1, 2]، وهي فهارس جميع عناصرnums.[](الفهرسة): للوصول إلى قيمة عند فهرس معين.nums[0]تساوي1وnums[1]تساوي2وnums[2]تساوي3.+: لدمج القوائم.nums + [4, 5]تنتج[1, 2, 3, 4, 5].
لاحظ أن nums.append(4) تعدّل القائمة الموجودة نفسها، بينما nums + [4, 5] لا تعدّل nums. ويمكن الاحتفاظ بنتيجة nums + [4, 5] بإسنادها إلى متغير جديد. شغّل الكود التالي:
nums = [1, 2, 3]
new_nums = nums + [4, 5]
print(new_nums)
print(nums)
nums.append(4)
print(nums)
كما ترى، العامل + لا يعدّل nums نفسها، بينما append تفعل ذلك.
إليك فكرة جديدة: الإسناد عبر الفهرس(Subscript assignment). يمكنك تعيين قيمة جديدة في فهرس معين، لتحل محل القيمة السابقة، بالصيغة:
some_list[index] = new_value
سيظهر خطأ إذا لم يكن index فهرسًا صالحًا داخل some_list. شغّل المثال التالي:
nums = [1, 2, 3]
nums[1] = 9
print(nums)
index: تُرجع أول فهرس تظهر عنده قيمة معينة داخل القائمة، بالصيغة:
some_list.index(value)
ويظهر خطأ إذا لم تكن القيمة موجودة. جرّب هذا السطر في الطرفية:
[7, 8, 9, 8].index(8)
pop: تحذف عنصرًا عند فهرس محدد وتُرجع ذلك العنصر، بالصيغة:
some_list.pop(index)
إذا استدعيتها من دون وسيط، أي some_list.pop()، فإنها تحذف العنصر الأخير وتُرجعه. ويظهر خطأ إذا لم يكن index فهرسًا صالحًا في القائمة. شغّل المثال:
nums = [1, 2, 3]
print(nums.pop(1))
print(nums)
remove: تحذف أول ظهور لقيمة معينة، بالصيغة:
some_list.remove(value)
ويظهر خطأ إذا لم تكن القيمة موجودة في القائمة. شغّل المثال:
nums = [1, 2, 3]
nums.remove(1)
print(nums)
ستحل الآن أربعة تمارين قصيرة على هذه الأفكار. في القائمة التالية أسطر صحيحة وأخرى خاطئة مختلطة معًا. لكل تمرين قادم حل يتضمن سطرًا واحدًا فقط من هذه القائمة، ومهمتك اختيار السطر الصحيح:
x[len(x)] = x[0]
x[len(x) - 1] = x[0]
x[len(x) + 1] = x[0]
x + x[0]
[x] + x[0]
x + [x[0]]
[x] + [x[0]]
x + x.pop(0)
[x] + x.pop(0)
x + [x.pop(0)]
[x] + [x.pop(0)]
x.pop(x.append(0))
x.append(x.pop(0))
x.append(x[0])
x.append(x.index(0))
x.index(x.append(0))
x.pop(x.index(0))
x.index(x.pop(0))
إليك برنامجًا غير مكتمل:
x = ['a', 'b', 'c']
(insert_one_line_from_above)
print(x)
استبدل السطر الأوسط بسطر واحد من القائمة السابقة. يجب أن يعدّل البرنامج النهائي x بنقل العنصر الأول إلى النهاية، بحيث يطبع ['b', 'c', 'a'].
يجب أن يتكون حلك من ثلاث تعليمات بالضبط:
x = ['a', 'b', 'c']، ثم سطر واحد من القائمة كما هو تمامًا دون إضافات، ثمprint(x).نقل العنصر الأول إلى النهاية يحتاج إلى خطوتين.
حذف العنصر الأول...
ثم إضافته إلى النهاية.
ما الدوال أو الأساليب التي تساعدك على ذلك؟
تذكر أن أول فهرس هو 0.
أحسنت. في التمرين التالي ابدأ من البرنامج غير المكتمل نفسه:
x = ['a', 'b', 'c']
(insert_one_line_from_above)
print(x)
اختر سطرًا من القائمة السابقة يستبدل العنصر الأخير في x بالعنصر الأول، بحيث يطبع البرنامج ['a', 'b', 'a'].
يجب أن يتكون حلك من ثلاث تعليمات بالضبط:
x = ['a', 'b', 'c']، ثم سطر واحد من القائمة كما هو تمامًا دون إضافات، ثمprint(x).تحتاج أولًا إلى الحصول على قيمة العنصر الأول في
x...ثم إسناد هذه القيمة إلى آخر موضع في
x.كيف تسند قيمة إلى فهرس محدد داخل القائمة؟
ما فهرسا أول عنصر وآخر عنصر في
x؟
ممتاز!
ربما لاحظت أن الوصول إلى العنصر الأخير باستخدام x[len(x) - 1] طويل قليلًا. يمكنك كتابة الشيء نفسه بصورة أبسط: x[-1]. وبالمثل يمكن كتابة العنصر قبل الأخير x[len(x) - 2] على صورة x[-2]، وهكذا. يسمح بايثون بالعد من نهاية القائمة إلى الخلف، ويبدأ العنصر الأخير بالفهرس -1.
| الفهرس | العنصر الأول | العنصر الثاني | العنصر الثالث | ... | قبل الأخير | الأخير |
|---|---|---|---|---|---|---|
| من البداية | 0 | 1 | 2 | ... | len(x) - 2 | len(x) - 1 |
| من النهاية | -len(x) | -len(x) + 1 | -len(x) + 2 | ... | -2 | -1 |
التمرين التالي مختلف قليلًا: لن تعدّل القائمة x، بل ستنشئ قائمة جديدة اسمها y:
x = ['a', 'b', 'c']
y = (insert_one_line_from_above)
print(y)
يجب أن تكون y مثل x مع تكرار العنصر الأول في النهاية. لذلك يجب أن يطبع البرنامج ['a', 'b', 'c', 'a'].
يجب أن يتكون حلك من ثلاث تعليمات بالضبط:
x = ['a', 'b', 'c']، ثمy =وبعدها سطر واحد من القائمة كما هو تمامًا، ثمprint(y).أي الأسطر تنشئ قائمة جديدة بدل تعديل القائمة نفسها؟
xقائمة، وكل عنصر داخلxنص.يمكن جمع القوائم معًا، ويمكن جمع النصوص معًا، لكن لا يمكنك جمع نص مع قائمة.
كيف تنشئ قائمة تحتوي على عنصر واحد؟
عمل رائع. والآن التمرين الأخير:
x = [1, 2, 0, 3]
x.remove(0)
print(x)
استبدل السطر الأوسط x.remove(0) بسطر من القائمة السابقة يؤدي النتيجة نفسها.
يجب أن يتكون حلك من ثلاث تعليمات بالضبط:
x = [1, 2, 0, 3]، ثم سطر واحد من القائمة كما هو تمامًا دون إضافات، ثمprint(x).ماذا تفعل
x.remove(0)؟تحذف عنصرًا.
ما الدالة أو الأسلوب الآخر الذي يمكنه حذف عنصر؟
الدالة أو الأسلوب الآخر لا يكفي أن تقول له «احذف 0»؛ يحتاج إلى نوع مختلف من المعلومات.
بالتحديد، يحتاج إلى معرفة موضع 0.
أي دالة أو أسلوب يعطيك هذه المعلومة؟
عمل رائع!