الفصل : 3
الجزء : 1
العنوان : تقديم القوائم (INTRODUCING LISTS)
في هذا الفصل والفصل التالي ستتعلم ما هي القوائم وكيفية البدء بالعمل
مع العناصر الموجودة في القائمة. القوائم تسمح لك بتخزين مجموعات من المعلومات في مكان واحد ، سواء كان لديك عدد قليل من العناصر أو ملايين العناصر. القوائم هي واحدة من أقوى ميزات بايثون التي يمكن الوصول إليها بسهولة للمبرمجين المبتدئين ،وهي تربط العديد من المفاهيم المهمة في البرمجة.
ما هي القائمة (What Is a List) ؟
القائمة عبارة عن مجموعة من العناصر بترتيب معين. يمكنك عمل قائمة تتضمن حروف الأبجدية ، أو الأرقام من 0 إلى 9 ، أو أسماء جميع أفراد عائلتك. يمكنك وضع أي شيء تريده في قائمة ، ولا يلزم أن تكون العناصر الموجودة في قائمتك مرتبطة بأي طريقة خاصة. نظرًا لأن القائمة عادةً تحتوي على أكثر من عنصر واحد ، فمن الجيد جعل اسم قائمتك جمعًا ، مثل الأحرف أو الأرقام أو الأسماء.
في بايثون ، تشير الأقواس المربعة ([ ]) إلى قائمة ، ويتم فصل العناصر الفردية في القائمة بفواصل. فيما يلي مثال بسيط لقائمة تحتوي على أنواع قليلة من الدراجات:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles)
إذا طلبت من بايثون طباعة قائمة ، فسيعيد بايثون تمثيله للقائمة ، بما في ذلك الأقواس المربعة:
['trek', 'cannondale', 'redline', 'specialized']
لأن هذا ليس الإخراج الذي تريد أن يراه مستخدموك ، دعنا نتعلم كيفية الوصول إلى العناصر الفردية في القائمة.
استخراج عناصر من القائمة
القوائم هي مجموعات مرتبة ، لذلك يمكنك الوصول إلى أي عنصر في القائمة عن طريق إخبار بايثون بموضع العنصر المطلوب ، أو فهرسه. للوصول إلى عنصر في قائمة ، اكتب اسم القائمة متبوعًا بفهرسة العنصر المحاط بأقواس مربعة.
على سبيل المثال ، لنستخرج أول دراجة في قائمة الدراجات:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0])
فعندما نطلب عنصرًا واحدًا من قائمة ، فإن Python يعيد **ذلك العنصر فقط** بدون أقواس مربعة.
trek
هذا هو نتيجة تريد أن يراها مستخدموك: انتاج نظيف ومنسق بعناية.
يمكنك أيضًا استخدام أساليب السلاسل النصية من الفصل 2 على أي عنصر في هذه القائمة. على سبيل المثال ، يمكنك تهيئة العنصر 'trek' ليبدو أكثر قابلية للعرض باستخدام طريقة title ():
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[0].title())
ينتج هذا المثال نفس إخراج المثال السابق ، باستثناء أن 'Trek' مكتوبة بحرف كبير.
تبدأ مواضع الفهرسة من 0 وليس 1
يعتبر Python أن العنصر الأول في القائمة موجود في الموضع 0 ، وليس الموضع 1. ينطبق هذا على معظم لغات البرمجة ، والسبب في ذلك يعود إلى كيفية تنفيذ عمليات القائمة على مستوى أدنى. إذا كنت تتلقى نتائج غير متوقعة ، اسأل نفسك عما إذا كنت ترتكب خطأ بسيطًا ولكنه شائع بمقدار واحد.
يكون للعنصر الثاني في القائمة فهرس يساوي 1. باستخدام نظام العد هذا ، يمكنك الحصول على أي عنصر تريده من قائمة عن طريق طرح واحد من موضعه في القائمة. على سبيل المثال ، للوصول إلى العنصر الرابع في القائمة ، تطلب العنصر في الفهرس 3.
يطلب التالي الدراجات في الفهرس 1 والفهرس 3:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[1])
print(bicycles[3])
يعيد هذا الكود دراجتي الثانية والرابعة في القائمة:
cannondale
specialized
يتمتع Python بتركيب خاص للوصول إلى آخر عنصر في القائمة. إذا طلبت العنصر في الفهرس -1 ، فإن Python دائمًا يعيد آخر عنصر في القائمة:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
print(bicycles[-1])
يعيد هذا الكود القيمة 'specialized'. هذا التركيب مفيد للغاية ، لأنه في كثير من الأحيان سترغب في الوصول إلى العناصر الأخيرة في القائمة دون معرفة طول القائمة بالضبط. يمتد هذا الاتفاقية إلى قيم الفهرسة السالبة الأخرى أيضًا. يعيد الفهرس -2 العنصر الثاني من نهاية القائمة ، ويعيد الفهرس -3 العنصر الثالث من النهاية .
استغلال قيم فردية من قائمة (Using Individual Values from a List)
يمكنك استخدام قيم فردية من قائمة تمامًا كما تستخدم أي متغير آخر. على سبيل المثال ، يمكنك استخدام f-strings لإنشاء رسالة بناءً على قيمة من قائمة.
لنلق نظرة على محاولة سحب الدراجة الأولى من القائمة وإنشاء رسالة باستخدام تلك القيمة:
bicycles = ['trek', 'cannondale', 'redline', 'specialized']
message = f"My first bicycle was a {bicycles[0].title()}."
print(message)
نبني جملة باستخدام القيمة في bicycles[0] وننسبها إلى المتغير message. الإخراج عبارة عن جملة بسيطة حول أول دراجة في القائمة:
My first bicycle was a Trek.
جرب بنفسك
جرب هذه البرامج القصيرة للحصول على بعض الخبرة العملية مع قوائم Python. قد ترغب في إنشاء مجلد جديد لتدريبات كل فصل ، لتنظيمها.
3-1. الأسماء: قم بتخزين أسماء عدد قليل من أصدقائك في قائمة تسمى names. اطبع اسم كل شخص بالوصول إلى كل عنصر في القائمة ، واحدًا تلو الآخر.
3-2. التحية: ابدأ بالقائمة التي استخدمتها في التمرين 3-1 ، ولكن بدلاً من مجرد طباعة اسم كل شخص ، اطبع لهم رسالة. يجب أن يكون نص كل رسالة هو نفسه ، ولكن يجب تخصيص كل رسالة باسم الشخص.
3-3. قائمتك الخاصة: فكر في وسيلة النقل المفضلة لديك ، مثل الدراجة النارية أو السيارة ، وقم بعمل قائمة تخزن العديد من الأمثلة. استخدم قائمتك لطباعة سلسلة من البيانات حول هذه العناصر ، مثل "أود أن أمتلك دراجة نارية هوندا".
تعديل وإضافة وإزالة العناصر
ستكون معظم القوائم التي تنشئها ديناميكية ، مما يعني أنك ستنشئ قائمة ثم تضيف وتزيل عناصر منها أثناء تشغيل برنامجك. على سبيل المثال ، يمكنك إنشاء لعبة يتعين على اللاعب فيها إطلاق النار على الفضائين من السماء. يمكنك تخزين المجموعة الأولية من الفضائين في قائمة ثم إزالة أحد الفضائين من القائمة في كل مرة يتم إسقاطه. في كل مرة يظهر فيها كائن فضائي جديد على الشاشة ، تضيفه إلى القائمة. ستزداد قائمة الفضائين لديك وتنقص طولها طوال اللعبة.
تعديل العناصر في قائمة
يشبه بناء جملة تعديل عنصر بناء جملة الوصول إلى عنصر في قائمة. لتغيير عنصر ، استخدم اسم القائمة متبوعًا بفهرسة العنصر الذي تريد تغييره ، ثم قم بتوفير القيمة الجديدة التي تريد أن يكون هذا العنصر عليه.
على سبيل المثال ، لنفترض أن لدينا قائمة بالدراجات النارية والعنصر الأول في القائمة هو 'honda'. يمكننا تغيير قيمة هذا العنصر الأول بعد إنشاء القائمة:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles[0] = 'ducati'
print(motorcycles)
هنا نقوم بتعريف قائمة الدراجات النارية ، مع 'honda' كأول عنصر. ثم نغير قيمة العنصر الأول إلى 'ducati'. يوضح الإخراج أنه تم تغيير العنصر الأول ، بينما تظل بقية القائمة كما هي:
['honda', 'yamaha', 'suzuki']
['ducati', 'yamaha', 'suzuki']
يمكنك تغيير قيمة أي عنصر في قائمة ، وليس فقط العنصر الأول.
إضافة عناصر إلى قائمة
قد ترغب في إضافة عنصر جديد إلى قائمة لعدة أسباب. على سبيل المثال ، قد ترغب في جعل كيانات فضائية جديدة تظهر في لعبة ، أو إضافة بيانات جديدة إلى تصور ، أو إضافة مستخدمين مسجلين جدد إلى موقع الويب الذي قمت ببنائه. يوفر Python عدة طرق لإضافة بيانات جديدة إلى قوائم موجودة.
إلحاق العناصر إلى نهاية قائمة
أبسط طريقة لإضافة عنصر جديد إلى قائمة هي إلحاق العنصر بالقائمة. عند إلحاق عنصر بقائمة ، يتم إضافة العنصر الجديد إلى نهاية القائمة. باستخدام نفس القائمة التي كانت لدينا في المثال السابق ، سنضيف العنصر الجديد 'ducati' إلى نهاية القائمة:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
motorcycles.append('ducati')
print(motorcycles)
هنا تقوم طريقة append() بإضافة 'ducati' إلى نهاية القائمة ، دون التأثير على أي من العناصر الأخرى في القائمة:
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha', 'suzuki', 'ducati']
تجعل طريقة append() من السهل بناء القوائم بشكل ديناميكي. على سبيل المثال ، يمكنك البدء بقائمة فارغة ثم إضافة عناصر إلى القائمة باستخدام سلسلة من عمليات append(). باستخدام قائمة فارغة ، لنضيف العناصر 'honda' و 'yamaha' و 'suzuki' إلى القائمة:
motorcycles = []
motorcycles.append('honda')
motorcycles.append('yamaha')
motorcycles.append('suzuki')
print(motorcycles)
تبدو القائمة الناتجة تمامًا مثل القوائم في الأمثلة السابقة:
['honda', 'yamaha', 'suzuki']
بناء القوائم بهذه الطريقة أمر شائع جدًا ، لأنه في كثير من الأحيان لا تعرف البيانات التي يرغب المستخدمون في تخزينها في برنامج حتى بعد تشغيل البرنامج. لمنح المستخدمين التحكم ، ابدأ بتعريف قائمة فارغة ستحتفظ بقيم المستخدمين. ثم قم بإلحاق كل قيمة جديدة مقدمة بالقائمة التي قمت بإنشائها للتو.
إدراج عناصر في قائمة
يمكنك إضافة عنصر جديد في أي موضع في قائمتك باستخدام طريقة insert(). يمكنك القيام بذلك عن طريق تحديد فهرسة العنصر الجديد وقيمة العنصر الجديد:
motorcycles = ['honda', 'yamaha', 'suzuki']
motorcycles.insert(0, 'ducati')
print(motorcycles)
في هذا المثال ، نقوم بإدخال القيمة 'ducati' في بداية القائمة. تقوم طريقة insert() بفتح مساحة في الموضع 0 وتخزين القيمة 'ducati' في ذلك الموقع:
['ducati', 'honda', 'yamaha', 'suzuki']
تؤدي هذه العملية إلى تحريك كل قيمة أخرى في القائمة موضعًا واحدًا إلى اليمين.
إزالة عناصر من قائمة
غالبًا سترغب في إزالة عنصر أو مجموعة من العناصر من قائمة. على سبيل المثال ،عندما يقوم لاعب بإسقاط كائن فضائي من السماء ، فمن المرجح أن ترغب في إزالته من قائمة الكائنات الفضائية النشطة. أو عندما يقرر مستخدم إلغاء حسابه على تطبيق ويب أنشأته ، سترغب في إزالة ذلك المستخدم من قائمة المستخدمين النشطين. يمكنك إزالة عنصر وفقًا لموقعه في القائمة أو وفقًا لقيمته.
إزالة عنصر باستخدام بيان del
إذا كنت تعرف موضع العنصر الذي تريد إزالته من قائمة ، يمكنك استخدام بيان del:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[0]
print(motorcycles)
هنا نستخدم بيان del لإزالة العنصر الأول ، 'honda' ، من قائمة الدراجات النارية:
['honda', 'yamaha', 'suzuki']
['yamaha', 'suzuki']
يمكنك إزالة عنصر من أي موضع في قائمة باستخدام بيان del إذا كنت تعرف فهرسه. على سبيل المثال ، إليك كيفية إزالة العنصر الثاني ، 'yamaha' ، من القائمة:
motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
del motorcycles[1]
print(motorcycles)
يتم حذف الدراجة النارية الثانية من القائمة:
['honda', 'yamaha', 'suzuki']
['honda', 'suzuki']
في كلا المثالين ، لم يعد بإمكانك الوصول إلى القيمة التي تمت إزالتها من القائمة بعد استخدام بيان del.
إزالة عنصر باستخدام طريقة pop()
في بعض الأحيان ، سترغب في استخدام قيمة عنصر بعد إزالته من قائمة. على سبيل المثال ، قد ترغب في الحصول على موضع x و y لكائن فضائي تم إسقاطه للتو ، حتى تتمكن من رسم انفجار في ذلك الموضع. في تطبيق ويب ، قد ترغب في إزالة مستخدم من قائمة الأعضاء النشطين ثم إضافة ذلك المستخدم إلى قائمة الأعضاء غير النشطين.
تزيل طريقة pop() آخر عنصر في القائمة ، لكنها تسمح لك بالعمل مع ذلك العنصر بعد إزالته. يأتي مصطلح pop من التفكير في قائمة كمكدس من العناصر واستخراج عنصر واحد من أعلى المكدس. في هذا التشبيه ، يتوافق أعلى كومة مع نهاية القائمة.
لنقم باستخراج دراجة نارية من قائمة الدراجات النارية:
❶ motorcycles = ['honda', 'yamaha', 'suzuki']
print(motorcycles)
❷ popped_motorcycle = motorcycles.pop()
❸ print(motorcycles)
❹ print(popped_motorcycle)
نبدأ بتعريف وطباعة قائمة الدراجات النارية ❶. ثم نقوم باستخراج قيمة من القائمة ، ونخصص تلك القيمة للمتغير popped_motorcycle ❷. نقوم بطباعة القائمة ❸ لإظهار أنه تمت إزالة قيمة من القائمة. ثم نقوم بطباعة القيمة التي تم استخراجها ❹ لإثبات أننا لا نزال نتمكن من الوصول إلى القيمة التي تمت إزالتها.
يوضح الإخراج أنه تمت إزالة القيمة 'suzuki' من نهاية القائمة وتم الآن تعيينها إلى المتغير popped_motorcycle:
['honda', 'yamaha', 'suzuki']
['honda', 'yamaha']
suzuki
كيف يمكن أن تكون طريقة pop() مفيدة؟ تخيل أن الدراجات النارية في القائمة يتم تخزينها بترتيب زمني ، وفقًا لتاريخ ملكيتنا لها. إذا كانت هذه هي الحالة ، يمكننا استخدام طريقة pop() لطباعة بيان حول آخر دراجة نارية قمنا بشرائها:
motorcycles = ['honda', 'yamaha', 'suzuki']
last_owned = motorcycles.pop()
print(f"The last motorcycle I owned was a {last_owned.title
()}.")
النتيجة عبارة عن جملة بسيطة حول أحدث دراجة نارية امتلكناها:
The last motorcycle I owned was a Suzuki.
ازالة عناصر من أي موضع في قائمة
يمكنك استخدام pop() لإزالة عنصر من أي موضع في قائمة عن طريق تضمين فهرسة العنصر الذي تريد إزالته بين قوسين:
motorcycles = ['honda', 'yamaha', 'suzuki']
first_owned = motorcycles.pop(0)
print(f"The first motorcycle I owned was a {first_owned.title
()}.")
بعد استخراج العنصر الأول من القائمة ، نقوم بطباعة رسالة حول تلك الدراجة النارية. الناتج عبارة عن جملة بسيطة تصف أول دراجة نارية امتلكتها على الإطلاق:
The first motorcycle I owned was a Honda.
تذكر أنه في كل مرة تستخدم فيها pop () ، لم يعد العنصر الذي تعمل معه مخزونا في القائمة.
إذا كنت غير متأكد مما إذا كنت ستستخدم بيان del أو طريقة pop () ، فإليك طريقة بسيطة للقرار: عندما تريد حذف عنصر من قائمة وعدم استخدام ذلك العنصر بأي شكل من الأشكال ، استخدم بيان del ؛ إذا كنت تريد استخدام عنصر أثناء إزالته ، استخدم طريقة pop ().
إزالة عنصر حسب القيمة
في بعض الأحيان لا تعرف موقع القيمة التي تريد إزالتها من القائمة. إذا كنت تعرف فقط قيمة العنصر الذي تريد إزالته ، يمكنك استخدام طريقة remove ().
على سبيل المثال ، لنفترض أننا نريد إزالة القيمة 'ducati' من قائمة الدراجات النارية:
motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
motorcycles.remove('ducati')
print(motorcycles)
هنا تطلب طريقة remove () من Python معرفة مكان ظهور 'ducati' في القائمة وإزالة ذلك العنصر:
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
يمكنك أيضًا استخدام طريقة remove () للعمل مع قيمة يتم إزالتها من قائمة. لنقم بإزالة القيمة 'ducati' ونطبع سببًا لإزالتها من القائمة:
❶ motorcycles = ['honda', 'yamaha', 'suzuki', 'ducati']
print(motorcycles)
❷ too_expensive = 'ducati'
❸ motorcycles.remove(too_expensive)
print(motorcycles)
❹ print(f"\nA {too_expensive.title()} is too expensive for m
e.")
بعد تعريف القائمة ❶ ، نقوم بتعيين القيمة 'ducati' إلى متغير يسمى too_expensive ❷. ثم نستخدم هذا المتغير لإخبار Python بأي قيمة لإزالتها من القائمة ❸. تمت إزالة القيمة 'ducati' من القائمة ❹ ولكن لا يزال من الممكن الوصول إليها من خلال المتغير too_expensive ، مما يسمح لنا بطباعة بيان حول سبب إزالة 'ducati' من قائمة الدراجات النارية:
['honda', 'yamaha', 'suzuki', 'ducati']
['honda', 'yamaha', 'suzuki']
A Ducati is too expensive for me.
ملاحظة
تقوم طريقة remove () بحذف الظهور الأول للقيمة التي تحددها فقط. إذا كان هناك احتمال ظهور القيمة أكثر من مرة في القائمة ، فستحتاج إلى استخدام حلقة للتأكد من إزالة جميع حالات ظهور القيمة. ستتعلم كيفية القيام بذلك في الفصل 7.
جربها بنفسك
التمرينات التالية أكثر تعقيدًا قليلاً من تلك الموجودة في الفصل 2 ، لكنها تتيح لك الفرصة لاستخدام القوائم بكل الطرق الموضحة.
3-4. قائمة الضيوف: إذا كان بإمكانك دعوة أي شخص ، على قيد الحياة أو ميت ، إلى العشاء ، فمن ستدعو؟ قم بعمل قائمة تتضمن ثلاثة أشخاص على الأقل ترغب في دعوتهم إلى العشاء. ثم استخدم قائمتك لطباعة رسالة لكل شخص ، تدعوه إلى العشاء.
3-5. تغيير قائمة الضيوف: لقد علمت للتو أن أحد ضيوفك لا يمكنه حضور العشاء ، لذلك تحتاج إلى إرسال مجموعة جديدة من الدعوات. عليك التفكير في دعوة شخص آخر.
ابدأ ببرنامجك من التمرين 3-4. أضف استدعاء print () في نهاية البرنامج ، مع ذكر اسم الضيف الذي لا يمكنه الحضور.
قم بتعديل قائمتك ، واستبدل اسم الضيف الذي لا يمكنه الحضور باسم الشخص الجديد الذي تقوم بدعوته.
اطبع مجموعة ثانية من رسائل الدعوة ، واحدة لكل شخص لا يزال في قائمتك.
3-6. المزيد من الضيوف: لقد وجدت للتو طاولة طعام أكبر ، لذا أصبح لديك مساحة أكبر الآن. فكر في ثلاثة ضيوف آخرين لدعوتهم إلى العشاء.
* أضف جملة `print()` إلى نهاية برنامجك لإعلام الضيوف بأنك وجدت طاولة أكبر.
* استخدم `insert()` لإضافة ضيف جديد إلى بداية قائمتك.
* استخدم `insert()` مرة أخرى لإضافة ضيف جديد إلى منتصف قائمتك.
* استخدم `append()` لإضافة ضيف جديد إلى نهاية قائمتك.
* اطبع مجموعة جديدة من رسائل الدعوة، واحدة لكل شخص في قائمتك.
**3-7.قائمة ضيوف أصغر حجما**
اكتشفت للتو أن طاولة العشاء الجديدة لن تصل في الوقت المناسب للعشاء ، والآن لديك مساحة لشخصين فقط.
* ابدأ ببرنامجك من التمرين 3-6. أضف سطرًا جديدًا يطبع رسالة تفيد بأنه يمكنك دعوة شخصين فقط لتناول العشاء.
* استخدم `pop()` لإزالة الضيوف من قائمتك واحدًا تلو الآخر حتى يتبقى اسمان فقط في قائمتك. في كل مرة تقوم فيها بإزالة اسم من قائمتك ، اطبع رسالة لذلك الشخص لإخباره بأنك آسف لأنك لا تستطيع دعوته لتناول العشاء.
* اطبع رسالة لكل شخصين لا يزالان في قائمتك لإعلامهما بأنهما لا يزالان مدعوين.
* استخدم `del` لحذف آخر اسمين من قائمتك ، بحيث يكون لديك قائمة فارغة. اطبع قائمتك للتأكد من أن لديك بالفعل قائمة فارغة في نهاية البرنامج.
النهاية
نكون هنا انتهينا من الجزء 1 من الفصل 3 من منهج تعلم Python من كتاب python crash course بالعربية
واذا واجهتك اي مشكلة في الفهم او ما شابه , يمكنك على الفور الذهاب الى المجتمع الخاص بنا في Telegram للمناقشة والتواصل معنا من هنا
او اذا واجهتك مشكلة في الموقع او تريد اجابة سريعة يمكنك الذهاب الى اخر صفحة في الموقع ستجد صفحة اتصل بنا موجودة يمكنك ارسالة لنا مشكلتك , وسيتم الرد عليها بسرعة جدا ان شاء الله
ويمكنك الأنضمام الى المجتمع Hidden Lock بالكامل مع جميع قنواته للأستفادة في اخر الأخبار في عالم التقنية وايضا الكتب بالمجان والكورسات والمقالات من خلال الرابط التالي لمجموعة القنوات من هنا
يمكنك ايضا متابعتنا في منصات X او Twitter سابقا , لمشاهدة الاخبار والمقالات السريعة والمهمة من
وفقط كان معكم sparrow مقدم هذه الشهادة من فريق Hidden Lock