شرح List Comprehension في Python للمبتدئين مع أمثلة سهلة

شرح List Comprehension في Python للمبتدئين لإنشاء القوائم المختصرة بدل for loop

إذا كنت تتعلم بايثون وبدأت تستخدم القوائم و for loop، فغالبًا ستقابل مصطلحًا مهمًا اسمه List Comprehension.

في هذا الدرس من موقع بايثون العرب سنتعلم معنى List Comprehension في Python بطريقة بسيطة، وسنرى كيف نستخدمها لإنشاء القوائم بكود مختصر وواضح.

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

{getToc} $title={محتوى المقال}

{alertInfo} List Comprehension هي طريقة مختصرة لإنشاء قائمة جديدة باستخدام for loop داخل سطر واحد.

قبل أن تبدأ، يفضل أن تكون فاهمًا أساسيات القوائم والحلقات:

شرح الصيغة الأساسية لـ List Comprehension في Python باستخدام expression و for و iterable

ما هي List Comprehension في Python؟

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

بدل أن تكتب عدة أسطر لإنشاء قائمة، يمكنك أحيانًا كتابة نفس الفكرة في سطر واحد.

مثلاً، لو أردنا إنشاء قائمة تحتوي على الأرقام من 0 إلى 4، يمكننا فعل ذلك بالطريقة العادية:

numbers = []

for i in range(5):

    numbers.append(i)

print(numbers)

الناتج:

[0, 1, 2, 3, 4]

وبنفس الفكرة يمكننا استخدام List Comprehension:

numbers = [i for i in range(5)]

print(numbers)

الناتج نفسه:

[0, 1, 2, 3, 4]

الشكل العام لـ List Comprehension

الشكل العام يكون هكذا:

new_list = [expression for item in iterable]

لنفهمها ببساطة:

  • expression: القيمة التي تريد إضافتها إلى القائمة الجديدة.
  • item: المتغير الذي يأخذ كل عنصر أثناء التكرار.
  • iterable: الشيء الذي نمر عليه، مثل قائمة أو range أو نص.
{alertInfo} اقرأ List Comprehension من جهة for أولًا، ثم افهم ماذا سيتم وضعه في بداية القائمة.

مثال بسيط: إنشاء قائمة مربعات الأرقام

لنفترض أننا نريد إنشاء قائمة تحتوي على مربعات الأرقام من 1 إلى 5.

بالطريقة العادية:

squares = []

for num in range(1, 6):

    squares.append(num * num)

print(squares)

الناتج:

[1, 4, 9, 16, 25]

باستخدام List Comprehension:

squares = [num * num for num in range(1, 6)]

print(squares)

نفس الناتج، لكن بكود أقصر.

مثال إنشاء قائمة مربعات الأرقام في Python باستخدام List Comprehension بدل append داخل for loop

استخدام List Comprehension مع النصوص

يمكنك استخدام List Comprehension مع النصوص أيضًا.

مثلاً، نريد إنشاء قائمة تحتوي على كل حرف من كلمة Python:

letters = [letter for letter in "Python"]

print(letters)

الناتج:

['P', 'y', 't', 'h', 'o', 'n']

هنا مررنا على كل حرف داخل النص، ثم أضفنا الحرف إلى القائمة الجديدة.

استخدام if داخل List Comprehension

يمكنك إضافة شرط if داخل List Comprehension لتصفية العناصر.

مثلاً، نريد قائمة تحتوي فقط على الأرقام الزوجية من 1 إلى 10.

بالطريقة العادية:

even_numbers = []

for num in range(1, 11):

    if num % 2 == 0:

        even_numbers.append(num)

print(even_numbers)

الناتج:

[2, 4, 6, 8, 10]

باستخدام List Comprehension:

even_numbers = [num for num in range(1, 11) if num % 2 == 0]

print(even_numbers)
{alertSuccess} إذا كان الشرط بسيطًا، فإن List Comprehension تجعل الكود أقصر وأسهل قراءة.

شرح مثال الأرقام الزوجية

هذا الجزء:

for num in range(1, 11)

يعني مر على الأرقام من 1 إلى 10.

وهذا الشرط:

if num % 2 == 0

يعني خذ الرقم فقط إذا كان زوجيًا.

والقيمة التي تضاف للقائمة هي:

num

لذلك تكون القائمة النهائية هي الأرقام الزوجية فقط.

استخدام if داخل List Comprehension في Python لاستخراج الأرقام الزوجية من 1 إلى 10

تعديل القيم أثناء إنشاء القائمة

List Comprehension لا تستخدم فقط لنسخ العناصر، بل يمكن استخدامها لتعديل القيم أيضًا.

مثلاً، تحويل الأسماء إلى حروف كبيرة:

names = ["ahmed", "sara", "omar"]

upper_names = [name.upper() for name in names]

print(upper_names)

الناتج:

['AHMED', 'SARA', 'OMAR']

هنا مررنا على كل اسم، ثم استخدمنا upper() لتحويله إلى حروف كبيرة.

استخدام List Comprehension مع split

يمكننا استخدام List Comprehension مع split() لمعالجة كلمات النص.

مثال:

text = "python is easy"

words = [word.capitalize() for word in text.split()]

print(words)

الناتج:

['Python', 'Is', 'Easy']

هذا المثال يربط بين درس حساب عدد الكلمات ودرس List Comprehension.

يمكنك قراءة مثال حساب الكلمات هنا: بايثون بالمثال 3: حساب عدد الكلمات في نص باستخدام Python.

مثال عملي: استخراج الكلمات الطويلة من نص

لنفترض أن لدينا نصًا، ونريد استخراج الكلمات التي يزيد طولها عن 4 أحرف.

text = "Python is a powerful programming language"

long_words = [word for word in text.split() if len(word) > 4]

print(long_words)

الناتج:

['Python', 'powerful', 'programming', 'language']

هذا مثال ممتاز يوضح قوة List Comprehension في التعامل مع النصوص والقوائم.

متى لا نستخدم List Comprehension؟

رغم أن List Comprehension مفيدة، لكنها ليست مناسبة دائمًا.

إذا كان الكود طويلًا أو يحتوي على شروط كثيرة، فقد يصبح صعب القراءة.

{alertWarning} لا تستخدم List Comprehension فقط لأنها أقصر. استخدمها عندما تجعل الكود أوضح، وليس أكثر تعقيدًا.

مثال غير مريح للقراءة:

result = [x * 2 for x in range(20) if x % 2 == 0 if x > 5]

في مثل هذه الحالات، قد تكون الحلقة العادية أوضح وأسهل للمبتدئ.

الفرق بين for loop و List Comprehension

المقارنة for loop List Comprehension
الوضوح للمبتدئ أسهل في البداية تحتاج تدريبًا بسيطًا
عدد الأسطر أكثر أقل
الاستخدام الأفضل عندما يكون المنطق طويلًا عندما تكون الفكرة بسيطة وواضحة
القراءة واضحة جدًا ممتازة إذا لم تكن معقدة
مقارنة بين for loop و List Comprehension في Python من حيث عدد الأسطر والوضوح والاستخدام المناسب

أخطاء شائعة عند استخدام List Comprehension

الخطأ الأول: نسيان الأقواس المربعة

هذا خطأ شائع:

numbers = i for i in range(5)

الصحيح:

numbers = [i for i in range(5)]

الخطأ الثاني: وضع if في مكان غير مناسب

إذا كنت تستخدم if كشرط تصفية، فغالبًا يأتي في النهاية.

even_numbers = [num for num in range(10) if num % 2 == 0]

الخطأ الثالث: استخدام List Comprehension مع كود معقد جدًا

إذا شعرت أن السطر أصبح طويلًا جدًا، استخدم for loop عادية.

{alertSuccess} القاعدة الذهبية: إذا كانت List Comprehension تجعل الكود أوضح فاستخدمها، وإذا جعلته مربكًا فاستخدم for loop عادية.

مثال نهائي شامل

لنأخذ مثالًا يجمع أكثر من فكرة.

نريد استخراج الأرقام الزوجية من قائمة، ثم ضرب كل رقم في 2.

numbers = [1, 2, 3, 4, 5, 6]

result = [num * 2 for num in numbers if num % 2 == 0]

print(result)

الناتج:

[4, 8, 12]

ماذا حدث؟

  • مررنا على كل رقم داخل القائمة.
  • اخترنا فقط الأرقام الزوجية.
  • ضربنا كل رقم زوجي في 2.
  • أنشأنا قائمة جديدة بالنتيجة.

روابط مفيدة

لفهم القوائم بشكل أفضل، اقرأ: أساسيات بايثون 8: شرح Lists في Python.

ولفهم الحلقات المستخدمة داخل List Comprehension، اقرأ: أساسيات بايثون 12: شرح Loops في Python.

ولمشاهدة مثال عملي على القوائم، اقرأ: بايثون بالمثال: حذف العناصر المكررة من List في Python.

ويمكنك الرجوع إلى توثيق بايثون الرسمي: Python List Comprehensions Documentation.

مقالات مقترحة من بايثون العرب

خلاصة الدرس

في هذا الدرس تعلمنا شرح List Comprehension في Python بطريقة سهلة.

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

الشكل الأساسي هو:

new_list = [expression for item in iterable]

ومع الشرط:

new_list = [expression for item in iterable if condition]

استخدمها عندما يكون الكود بسيطًا وواضحًا، وتجنب استخدامها إذا جعلت السطر طويلًا ومربكًا.

تمرين بسيط لك

لديك القائمة التالية:

numbers = [1, 2, 3, 4, 5]

استخدم List Comprehension لإنشاء قائمة جديدة تحتوي على كل رقم مضروبًا في 10.

النتيجة المتوقعة:

[10, 20, 30, 40, 50]

إرسال تعليق

أحدث أقدم