فهم كيفية استعمال List Comprehensions في بايثون 3
تعتبر قوائم الفهم أو List Comprehensions واحدة من أقوى الأدوات في لغة البرمجة بايثون، وهي توفر طريقة مختصرة وفعالة لإنشاء القوائم. يتيح لك هذا الأسلوب كتابة شيفرات مدمجة بطريقة أبسط وأكثر وضوحًا مقارنة بالطرق التقليدية مثل استخدام الحلقات. في هذا المقال، سنستعرض مفهوم List Comprehensions في بايثون 3 بشكل مفصل، بالإضافة إلى كيفية استخدامها في مجموعة من السيناريوهات المختلفة.
1. ما هي List Comprehensions؟
قوائم الفهم هي تقنية في بايثون تسمح بإنشاء القوائم بشكل مباشر باستخدام تعبيرات مختصرة ومفهومة. بدلاً من كتابة حلقة تكرار (مثل for أو while) لإضافة عناصر إلى قائمة، يمكنك استخدام List Comprehension لكتابة الشيفرة بشكل أكثر إيجازًا.
الشكل العام:
python[expression for item in iterable if condition]
-
expression: هو تعبير يقوم بحساب قيمة معينة ويُضاف إلى القائمة الناتجة.
-
item: العنصر الحالي في التكرار.
-
iterable: الكائن القابل للتكرار الذي سيتم المرور عليه (مثل قائمة أو سلسلة نصية أو مجموعة).
-
condition (اختياري): شرط يُطبق على العنصر قبل إضافته إلى القائمة.
2. الفوائد الرئيسية لاستخدام List Comprehensions
2.1. إيجاز الكود
من أهم فوائد استخدام List Comprehensions هي تقليل عدد الأسطر في الكود. فعند استخدام الحلقات التقليدية، يتعين عليك كتابة عدة أسطر من الكود، بينما يمكنك استخدام List Comprehensions في سطر واحد فقط.
2.2. زيادة الكفاءة
تتم معالجة List Comprehensions بشكل أكثر كفاءة من الحلقات التقليدية، حيث أنها تقوم بتنفيذ العملية بشكل مباشر باستخدام آلية مدمجة في بايثون، مما يوفر الوقت والذاكرة.
2.3. سهولة القراءة والفهم
الشيفرات التي تحتوي على List Comprehensions غالبًا ما تكون أسهل في القراءة من الشيفرات التي تستخدم الحلقات التقليدية. الفكرة واضحة ومباشرة، مما يجعل الكود أكثر مرونة.
3. أمثلة على List Comprehensions
3.1. إنشاء قائمة من الأعداد
لنبدأ بتوضيح كيفية إنشاء قائمة تحتوي على الأعداد من 0 إلى 9 باستخدام List Comprehension:
pythonnumbers = [x for x in range(10)]
print(numbers)
الإخراج:
csharp[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
في هذا المثال، يتم إنشاء قائمة تحتوي على الأرقام من 0 إلى 9 باستخدام تعبير بسيط داخل List Comprehension.
3.2. تصفية القيم باستخدام شرط
يمكنك إضافة شرط داخل List Comprehension لاختيار القيم التي تريد تضمينها في القائمة الناتجة. على سبيل المثال، لإنشاء قائمة تحتوي على الأعداد الزوجية من 0 إلى 9:
pythoneven_numbers = [x for x in range(10) if x % 2 == 0]
print(even_numbers)
الإخراج:
csharp[0, 2, 4, 6, 8]
هنا، قمنا بإضافة شرط if x % 2 == 0 لتصفية الأعداد الزوجية فقط.
3.3. تطبيق العمليات على العناصر
يمكنك أيضًا استخدام List Comprehension لتطبيق العمليات على العناصر أثناء إضافة كل عنصر إلى القائمة. على سبيل المثال، إذا أردنا مضاعفة كل عدد في نطاق من 0 إلى 9:
pythondoubled_numbers = [x * 2 for x in range(10)]
print(doubled_numbers)
الإخراج:
csharp[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
في هذا المثال، قمنا بتطبيق عملية ضرب على كل عنصر قبل إضافته إلى القائمة الناتجة.
3.4. تطبيق أكثر من شرط
يمكنك أيضًا تطبيق أكثر من شرط في List Comprehension. على سبيل المثال، لإنشاء قائمة تحتوي على الأعداد التي هي في الوقت نفسه زوجية وتقع ضمن نطاق معين:
pythonfiltered_numbers = [x for x in range(20) if x % 2 == 0 and x > 5]
print(filtered_numbers)
الإخراج:
csharp[6, 8, 10, 12, 14, 16, 18]
هنا، قمنا باستخدام شرطين معًا لتصفية الأعداد الزوجية التي تتجاوز 5.
3.5. استخدام التكرار في داخل التكرار (Nested Loops)
يمكنك أيضًا استخدام List Comprehension مع الحلقات المتداخلة لإنشاء قوائم أكثر تعقيدًا. على سبيل المثال، لإنشاء قائمة تحتوي على جميع الأزواج الممكنة من قائمتين:
pythonpairs = [(x, y) for x in range(3) for y in range(3)]
print(pairs)
الإخراج:
css[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
هنا، قمنا باستخدام حلقتين متداخلتين لتوليد جميع الأزواج من الأعداد من 0 إلى 2.
4. List Comprehensions مع الدوال
4.1. استخدام الدوال مع List Comprehension
يمكنك أيضًا استخدام List Comprehension مع الدوال لتطبيق العمليات. على سبيل المثال، لإنشاء قائمة تحتوي على أطوال النصوص في قائمة معينة:
pythonwords = ["apple", "banana", "cherry"]
word_lengths = [len(word) for word in words]
print(word_lengths)
الإخراج:
csharp[5, 6, 6]
هنا، قمنا باستخدام الدالة len لحساب طول كل كلمة في القائمة.
4.2. استخدام الدوال المدمجة مع List Comprehension
إحدى الاستخدامات المفيدة هي دمج List Comprehensions مع دوال مدمجة مثل map() أو filter(). على سبيل المثال، يمكن استخدام List Comprehension مع str.upper() لتحويل جميع النصوص في القائمة إلى أحرف كبيرة:
pythonwords = ["apple", "banana", "cherry"]
uppercase_words = [word.upper() for word in words]
print(uppercase_words)
الإخراج:
css['APPLE', 'BANANA', 'CHERRY']
5. مقارنة List Comprehensions مع الحلقات التقليدية
من المفيد مقارنة List Comprehensions مع الحلقات التقليدية. في المثال التالي، سنقوم بإنشاء قائمة تحتوي على الأعداد الزوجية من 0 إلى 9 باستخدام كلا الأسلوبين:
باستخدام List Comprehension:
pythoneven_numbers = [x for x in range(10) if x % 2 == 0]
باستخدام الحلقة التقليدية:
pythoneven_numbers = []
for x in range(10):
if x % 2 == 0:
even_numbers.append(x)
كما نلاحظ، فإن List Comprehension أكثر إيجازًا ووضوحًا مقارنة بالحلقة التقليدية.
6. الأداء والكفاءة
من الناحية العامة، تعتبر List Comprehensions أسرع وأكثر كفاءة من الحلقات التقليدية. في العمليات التي تشمل معالجة مجموعات كبيرة من البيانات، يمكن أن تؤدي List Comprehensions إلى تحسينات كبيرة في الأداء بفضل التنفيذ الأمثل داخل بايثون.
7. التعامل مع القوائم متعددة الأبعاد
7.1. قوائم ثنائية الأبعاد
في بعض الأحيان، تحتاج إلى التعامل مع قوائم ثنائية الأبعاد أو أكثر. على سبيل المثال، لإنشاء قائمة تحتوي على الأعداد الزوجية من جميع القوائم الداخلية في قائمة ثنائية الأبعاد:
pythonmatrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
even_numbers = [x for row in matrix for x in row if x % 2 == 0]
print(even_numbers)
الإخراج:
csharp[2, 4, 6, 8]
7.2. قوائم ثلاثية الأبعاد
يمكنك أيضًا استخدام List Comprehension مع قوائم ثلاثية الأبعاد، وهكذا تصبح الطريقة مثالية لتكرار واستكشاف القيم في هياكل بيانات متعددة الأبعاد.
8. الاستنتاجات
تُعد List Comprehensions واحدة من الأدوات القوية والمفيدة في بايثون، التي تساعد المبرمجين على كتابة شيفرات أكثر كفاءة، واختصار الأكواد بشكل كبير. من خلال فهمها وا

