إذا كنت تتعلم بايثون وبدأت تستخدم القوائم و for loop، فغالبًا ستقابل مصطلحًا مهمًا اسمه List Comprehension.
في هذا الدرس من موقع بايثون العرب سنتعلم معنى List Comprehension في Python بطريقة بسيطة، وسنرى كيف نستخدمها لإنشاء القوائم بكود مختصر وواضح.
الفكرة ليست صعبة، لكنها تحتاج إلى فهم تدريجي، لذلك سنبدأ بالطريقة العادية ثم ننتقل إلى الطريقة المختصرة.
{getToc} $title={محتوى المقال}
{alertInfo} List Comprehension هي طريقة مختصرة لإنشاء قائمة جديدة باستخدام for loop داخل سطر واحد.
قبل أن تبدأ، يفضل أن تكون فاهمًا أساسيات القوائم والحلقات:
ما هي 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)
نفس الناتج، لكن بكود أقصر.
استخدام 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
لذلك تكون القائمة النهائية هي الأرقام الزوجية فقط.
تعديل القيم أثناء إنشاء القائمة
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 |
|---|---|---|
| الوضوح للمبتدئ | أسهل في البداية | تحتاج تدريبًا بسيطًا |
| عدد الأسطر | أكثر | أقل |
| الاستخدام الأفضل | عندما يكون المنطق طويلًا | عندما تكون الفكرة بسيطة وواضحة |
| القراءة | واضحة جدًا | ممتازة إذا لم تكن معقدة |
أخطاء شائعة عند استخدام 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.
مقالات مقترحة من بايثون العرب
- بايثون بالمثال 3: حساب عدد الكلمات في نص باستخدام Python
- أساسيات بايثون 12: شرح Loops في Python للمبتدئين
- مشكلة وحل: حل خطأ TypeError can only concatenate str not int to str في Python
خلاصة الدرس
في هذا الدرس تعلمنا شرح 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]




