قائمة الفهم في بايثون - مع أمثلة

نشرت: 2022-02-18

في Python ، تساعدك List comprehensions في إنشاء قوائم جديدة من العناصر التكرارية الحالية ، مثل القوائم ، والسلاسل ، والجداول.

يتيح لك تركيبها المختصر إنشاء قوائم جديدة في سطر واحد فقط من التعليمات البرمجية. وسيعلمك هذا البرنامج التعليمي كيف يمكنك القيام بذلك.

خلال الدقائق القليلة القادمة ، ستتعلم:

  • كيفية إنشاء قائمة جديدة باستخدام حلقات for ،
  • صيغة استخدام list comprehensions في Python و
  • كيفية تعديل list comprehensions باستخدام عبارة if الشرطية.

بالإضافة إلى ذلك ، ستقوم أيضًا بتشفير العديد من الأمثلة التي ستساعدك على فهم قوائم الفهم بشكل أفضل.

دعنا نتعمق.

كيفية إنشاء قوائم Python باستخدام الحلقات

افترض أن لديك قائمة nums الأرقام. وتريد إنشاء قائمة أخرى تحتوي على مكعب كل الأرقام nums . إليك كيفية القيام بذلك باستخدام حلقة for في بايثون:

 nums = [2,3,5,7] num_cubes = [] for num in nums: num_cubes.append(num**3) print(num_cubes) # Output [8, 27, 125, 343]

في الكود أعلاه ، لدينا الخطوات التالية:

  • تهيئة num_cubes قائمة فارغة.
  • حلقة من خلال قائمة nums .
  • قم بالوصول إلى كل رقم ، num مكعبه باستخدام معامل الأُس: num**3 .
  • أخيرًا ، قم بإلحاق القيمة المكعبة بقائمة num_cubes

ملاحظة: في Python ، يتم استخدام عامل الأسي ** مع بناء الجملة: num**pow - يتم رفع عدد num إلى pow القوة.

ومع ذلك ، يمكنك القيام بذلك بسهولة أكبر باستخدام قائمة الفهم في بايثون. دعنا ننتقل إلى تعلم تركيبها.

قواعد فهم قائمة بايثون

يتم عرض الصيغة العامة لفهم القائمة أدناه.

 <new_list> = [<expression> for <item> in <iterable>]

دعونا نحلل بناء الجملة أعلاه.

  • في Python ، يتم تحديد القوائم بزوج من الأقواس المربعة [] - ومن ثم يتعين عليك إرفاق عبارة list comprehension (قائمة الفهم) داخل [] .
  • يشير <item> في <iterable> إلى أنك تقوم بالتكرار خلال ملف متكرر. أي كائن Python يمكنك إجراء حلقة منه والوصول إلى العناصر الفردية - مثل القوائم ، والمجموعات ، والسلاسل هي عناصر متكررة.
  • <expression> هو الناتج الذي ترغب في حسابه لكل <item> في <iterable> .

وهذا يبدو بسيطا ، نعم؟

في جوهر الأمر ، قد ترغب في القيام بشيء ما لجميع العناصر الموجودة في القائمة (أو أي عنصر قابل للتكرار) للحصول على قائمة جديدة .

باستخدام هذا ، يمكننا تبسيط بناء الجملة ، كما هو موضح في الصورة أدناه.

سرد-فهم-بناء الجملة
بناء جملة Python List Comprehension (صورة للمؤلف)

الآن بعد أن تعلمت بناء الجملة ، حان الوقت لبدء الترميز. يمكنك استخدام Python IDE عبر الإنترنت من Geekflare لمتابعة هذه الأمثلة. أو يمكنك تشغيلها على جهازك المحلي.

أمثلة على فهم قائمة بايثون

في القسم السابق ، قمت بإنشاء قائمة جديدة num_cubes من nums . لنبدأ بإعادة كتابة ذلك باستخدام قائمة الفهم.

استخدام قائمة الفهم بالأرقام

الآن دعنا نستخدم الصيغة المبسطة على النحو التالي:

  • <do-this> : هنا ، عليك مكعب كل num . لذا استبدل <do-this> num**3 .
  • <all-items> : المتغير num هو عدد - الأرقام الفردية في القائمة.
  • <this-list> : القائمة الحالية لدينا هي nums .
  • و [num**3 for num in nums] هو التعبير النهائي.

بتجميعها معًا ، لدينا مقتطف الشفرة التالي:

 num_cubes = [num**3 for num in nums] print(num_cubes) # Output [8, 27, 125, 343]

تهانينا ، لقد قمت بترميز قائمة الفهم الأولى الخاصة بك.

للمضي قدمًا ، دعنا نعمل مع سلاسل Python.

استخدام قائمة الفهم بالسلاسل

افترض أن لديك authors القائمة — يمكنك إعادة كتابة القائمة أدناه بالمؤلفين المفضلين لديك.

 authors = ["jane austen","george orwell","james clear","cal newport"]

لاحظ كيف أن أسماء المؤلفين مكتوبة بأحرف صغيرة في القائمة أعلاه. نود الآن تنسيقها في حالة العنوان وتخزينها في قائمة جديدة تسمى author_list .

ملاحظة: في Python ، يقبل عنوان طريقة السلسلة () سلسلة كوسيطة ، ويعيد نسخة من السلسلة المنسقة في حالة العنوان. أي أن الحرف الأول من كل كلمة بأحرف كبيرة: First-name Last-name

إذن ، هذا كل ما عليك القيام به:

  • حلقة من خلال قائمة authors ولكل author في القائمة ،
  • استدعاء author.title() للحصول على نسخة مغلفة بالعنوان من السلسلة.

ورمز Python لهذا موضح أدناه:

 authors = ["jane austen","george orwell","james clear","cal newport"] author_list = [author.title() for author in authors] print(author_list) # Output ['Jane Austen', 'George Orwell', 'James Clear', 'Cal Newport']

في الإخراج أعلاه ، لاحظ كيف تم تنسيق أسماء جميع المؤلفين في حالة العنوان - وهو ما أردناه.

استخدام قائمة الفهم مع قوائم متعددة

لقد تعلمت حتى الآن كيفية استخدام قائمة الفهم لإنشاء قوائم جديدة من قائمة موجودة. الآن دعنا نتعلم كيفية إنشاء قائمة جديدة من قوائم متعددة.

على سبيل المثال ، ضع في اعتبارك هذه المشكلة: لديك قائمتان l_arr و b_arr تحتويان على أطوال وعرض 4 مستطيلات.

وتحتاج إلى إنشاء area قائمة جديدة تتضمن مساحة هذه المستطيلات الأربعة. تذكر ، area = length * breadth .

 l_arr = [4,5,1,3] b_arr = [2,1,7,9]

ستحتاج إلى عناصر من كلتا القائمتين ( l_arr و b_arr ) لحساب المنطقة. ويمكنك القيام بذلك باستخدام وظيفة zip() في Python.

ملاحظة: في Python ، تأخذ الدالة zip() واحدًا أو أكثر من العناصر التكرارية كوسيطات مع بناء الجملة zip(*iterables) . ثم تقوم بإرجاع مكرر من tuple ، حيث تحتوي المجموعة i على العنصر i من كل من العناصر التكرارية.

الصورة التالية تصف هذا بالتفصيل. لديك 4 قيم في l_arr و b_arr ، لذا فإن نطاق المؤشرات يتراوح من 0 إلى 3. كما ترى ، تحتوي المجموعة 0 على l_arr[0] و b_arr[0] ، وتحتوي المجموعة 1 على l_arr[1] و b_arr[1] ، وما إلى ذلك.

بيثون مضغوط وظيفة
Python zip () الوظيفة (صورة المؤلف)

لذلك ، يمكنك تنفيذ حلقة من خلال zip(l_arr,b_arr) كما هو موضح أدناه:

 area = [l*b for l,b in zip(l_arr,b_arr)] print(area) # Output [8,5,7,27]

في القسم التالي ، ستتعلم كيفية استخدام العبارات الشرطية داخل قائمة الفهم.

فهم قائمة بايثون مع بناء جملة الشرط

لنبدأ بالبناء على الصيغة السابقة لفهم القائمة.

ها هي البنية:

 <new_list> = [<expression> for <item> in <iterable> if <condition>]

بدلاً من حساب <expression> <condition> العناصر ، فأنت ترغب فقط في القيام بذلك للعناصر التي تفي بشرط معين - حيث ، condition := True . وهذا يؤدي إلى بناء جملة مبسط كما هو موضح:

list-comprehension-with-condition-syntax
فهم قائمة بايثون مع بناء جملة الشرط (صورة للمؤلف)

مع ذلك ، دعنا ننتقل إلى أمثلة التعليمات البرمجية.

فهم قائمة بايثون مع أمثلة شرطية

# 1. لقد أعطيت الجملة "أنا أتعلم بايثون في عام 2022" . ترغب في الحصول على قائمة بجميع الأرقام في هذه السلسلة. فكيف يمكنك أن تفعل ذلك؟

في Python ، <char>.isdigit() على حرف <char> ويعيد True إذا كان رقمًا (0-9) ؛ وإلا فإنه يعود False .

يوضح مقتطف الشفرة أدناه كيف يمكنك جمع قائمة بجميع الأرقام في السلسلة str1 .

 str1 = "I'm learning Python3 in 2022" digits = [char for char in str1 if char.isdigit()] print(digits) # Output ['3', '2', '0', '2', '2']

في الكود أعلاه:

  • تقوم بحلقة عبر السلسلة str1 ،
  • الوصول إلى كل char للتحقق مما إذا كان رقمًا باستخدام طريقة isdigit() ، و
  • أضف char إلى قائمة digits الجديدة فقط إذا كان رقمًا.

لنأخذ مثالاً آخر.

# 2. لديك قائمة من الفواكه. وترغب في إنشاء قائمة تبدأ بـ starts_with_b تحتوي على جميع الفواكه من قائمة fruits التي تبدأ b . يمكنك استخدام طريقة startswith() لكتابة الشرط.

يقوم <str>.startswith('char') بإرجاع True إذا كان <str> يبدأ بـ 'char'؛ وإلا فإنه يعود False .

 fruits = ['blueberry','apple','banana','orange','cherry'] starts_with_b = [fruit for fruit in fruits if fruit.startswith('b')] print(starts_with_b) # Output ['blueberry', 'banana']

في الإخراج أعلاه ، نحصل على 'blueberry' و 'banana' وهما الثمار اللتان تبدأان بالحرف 'b' في قائمة fruits ، كما توقعنا.

وهذا يختتم مناقشتنا حول قائمة الفهم.

استنتاج

آمل أن يكون هذا البرنامج التعليمي قد ساعدك في فهم القوائم الشاملة في بايثون.

دعونا نلخص:

  • يمكنك استخدام [<فعل هذا> لـ <all-items> في <this-list>] لإنشاء قائمة جديدة باستخدام قائمة الفهم.
  • بالإضافة إلى ذلك ، يمكنك استخدام بناء الجملة [<قم بذلك> من أجل <all-items> في <this-list> إذا كان <condition-is-True>] مع العبارة الشرطية if .

بالإضافة إلى ذلك ، قمت أيضًا بترميز العديد من الأمثلة. كخطوة تالية ، يمكنك محاولة إعادة كتابة بعض حلقات Python الحالية لإنشاء قائمة باستخدام فهم القائمة. ترميز سعيد! حتى البرنامج التعليمي التالي.

يمكنك الآن إلقاء نظرة على كيفية تحويل قائمة إلى قاموس أو تعلم كيفية التعامل مع الملفات في Python.