القوائم في Python (Lists)
تخيّل أنك تريد حفظ أسماء كل أصدقائك في برنامج. هل ستنشئ متغيراً لكل صديق؟ بالطبع لا! في هذا الدرس ستتعلم القوائم (Lists): أهم طريقة في Python لحفظ مجموعة من القيم في متغير واحد، والإضافة إليها والحذف منها وترتيبها.
إنشاء قائمة
Section titled “إنشاء قائمة”القائمة تُكتب بين قوسين مربعين [ ]، والعناصر بينها فواصل:
fruits = ["تفاح", "موز", "برتقال"]print(fruits)['تفاح', 'موز', 'برتقال']القائمة مثل قائمة المشتريات التي تكتبها قبل الذهاب للسوق: عناصر مرتبة، يمكنك أن تضيف إليها وتشطب منها في أي وقت.
ويمكن أن تحتوي القائمة على أنواع مختلفة معاً:
mixed = ["علي", 15, True]print(mixed)['علي', 15, True]الوصول إلى العناصر
Section titled “الوصول إلى العناصر”تماماً مثل النصوص، العناصر مرقّمة من صفر، والأرقام السالبة تعدّ من النهاية:
fruits = ["تفاح", "موز", "برتقال"]print(fruits[0], fruits[-1])print(len(fruits))تفاح برتقال3والتقطيع يعمل أيضاً: nums[1:3] تأخذ العنصرين في الفهرسين 1 و 2.
تعديل العناصر
Section titled “تعديل العناصر”على عكس النصوص، القوائم قابلة للتعديل. يمكنك تغيير أي عنصر برقمه:
fruits[1] = "مانجو"print(fruits)['تفاح', 'مانجو', 'برتقال']الإضافة إلى القائمة
Section titled “الإضافة إلى القائمة”fruits.append("عنب") # أضف في النهايةprint(fruits)fruits.insert(0, "كيوي") # أضف في مكان محددprint(fruits)['تفاح', 'مانجو', 'برتقال', 'عنب']['كيوي', 'تفاح', 'مانجو', 'برتقال', 'عنب']appendتضيف عنصراً في نهاية القائمة. وهي الأكثر استخداماً.insert(مكان, عنصر)تضيف العنصر في المكان الذي تحدده، وتزيح الباقي.
الحذف من القائمة
Section titled “الحذف من القائمة”fruits.remove("برتقال") # احذف بالقيمةprint(fruits)last = fruits.pop() # احذف الأخير وأرجعهprint(last, fruits)['كيوي', 'تفاح', 'مانجو', 'عنب']عنب ['كيوي', 'تفاح', 'مانجو']remove(قيمة)تحذف أول عنصر يطابق القيمة.pop()تحذف آخر عنصر وتُرجعه لك، فتستطيع حفظه في متغير. وpop(0)تحذف الأول.
البحث في القائمة
Section titled “البحث في القائمة”الكلمة in تسأل: هل هذا العنصر موجود؟
print("تفاح" in fruits)Trueالترتيب ودوال مفيدة
Section titled “الترتيب ودوال مفيدة”nums = [5, 2, 9, 1]nums.sort()print(nums)print(sorted([3, 1, 2], reverse=True))print(sum(nums), min(nums), max(nums))[1, 2, 5, 9][3, 2, 1]17 1 9sort()ترتّب القائمة نفسها تصاعدياً.sorted()تُرجع قائمة جديدة مرتبة وتترك الأصلية كما هي. وreverse=Trueتعكس الترتيب.sumوminوmaxتعطيك المجموع وأصغر وأكبر قيمة.
بناء قائمة خطوة بخطوة
Section titled “بناء قائمة خطوة بخطوة”في البرامج الحقيقية، كثيراً ما تبدأ بقائمة فارغة ثم تملؤها أثناء عمل البرنامج، مثل سلة مشتريات تبدأ فارغة ويضيف إليها المستخدم:
cart = []cart.append("قميص")cart.append("حذاء")print(cart, len(cart))print(len([]) == 0)['قميص', 'حذاء'] 2Trueالقائمة الفارغة [] طولها صفر، وهي من القيم الخاطئة (Falsy) التي تعرفت عليها في درس الشروط، فيمكنك أن تكتب if cart: لتسأل «هل في السلة شيء؟». وستتعلم في الدرس القادم كيف تمر على عناصر القائمة واحداً تلو الآخر بحلقة for، وعندها ستظهر قوة القوائم الحقيقية.
الخطأ IndexError
Section titled “الخطأ IndexError”إذا طلبت فهرساً غير موجود، تتوقف Python:
fruits = ["كيوي", "تفاح", "مانجو"]print(fruits[10])IndexError: list index out of rangeالقائمة فيها 3 عناصر فقط (الفهارس 0 و 1 و 2)، فالفهرس 10 «خارج النطاق».
جرّب بنفسك
Section titled “جرّب بنفسك”اكتب برنامجاً لإدارة قائمة مهام:
- أنشئ قائمة فيها مهمتان:
"مذاكرة"و"رياضة". - أضف
"قراءة"في النهاية، و"صلاة الفجر"في البداية. - احذف
"رياضة". - اطبع عدد المهام والقائمة كاملة.
الناتج المتوقع:
عدد المهام: 3['صلاة الفجر', 'مذاكرة', 'قراءة']أخطاء شائعة
Section titled “أخطاء شائعة”- البدء من الفهرس 1: أول عنصر
items[0]، وآخر عنصرitems[-1]. - حذف عنصر غير موجود:
remove("x")لعنصر غير موجود يسببValueError. افحص أولاً بـin. - حفظ نتيجة sort:
nums = nums.sort()تجعلnumsتساويNone! لأنsortترتّب القائمة نفسها ولا تُرجع شيئاً.
اختبر نفسك
Section titled “اختبر نفسك”سؤال
إذا كانت nums = [4, 8, 15]، فما ناتج nums[-1]؟
الفهرس -1 يشير دائماً إلى آخر عنصر في القائمة.
سؤال
أي دالة تضيف عنصراً في نهاية القائمة؟
append تضيف في النهاية، و insert في مكان محدد، و pop تحذف.
الخلاصة
Section titled “الخلاصة”- القائمة مجموعة مرتبة من القيم بين
[ ]، وعناصرها مرقّمة من صفر. - القوائم قابلة للتعديل:
items[i] = قيمة. - الإضافة بـ
appendوinsert، والحذف بـremoveوpop. inللبحث، وsortوsortedللترتيب، وsumوminوmaxللحسابات.- الفهرس غير الموجود يسبب
IndexError.