AzLearn

List/Dict Comprehensions

Comprehensions

مفهوم ~20 دقيقة

List/Dict Comprehensions

في Python، هناك طريقة مختصرة وأنيقة لبناء القوائم والقواميس والمجموعات تُسمى Comprehension. بدلاً من كتابة حلقة for وثم append، تكتب كل شيء في سطر واحد داخل الهيكل نفسه.

هذا ليس مجرد اختصار للكتابة — هو طريقة مختلفة في التفكير: بدلاً من “كيف أبني هذه القائمة خطوة بخطوة”، تسأل “ما هي عناصر هذه القائمة؟”. الفرق في الأسلوب يجعل الكود أقرب لوصف القصد منه لوصف الخطوات.

من for-loop إلى List Comprehension

ابدأ بالمقارنة المباشرة لترى ما يحدث:

main.go

الصيغة الأساسية

الصيغة هي:

[التعبير for المتغير in التسلسل]

يمكنك قراءتها من اليمين: “لكل عنصر في التسلسل، احسب التعبير وضعه في القائمة.”

main.go

الفلترة بالشرط

أضف if بعد التسلسل للفلترة — فقط العناصر التي تحقق الشرط تُضاف:

main.go

التعبير والفلترة معاً

يمكنك تحويل العنصر وفلترته في نفس الوقت:

main.go

Dict Comprehensions

نفس الفكرة لكن ننتج قاموساً بدلاً من قائمة:

main.go

Set Comprehensions

نفس الصيغة بأقواس معقوصة — تنتج مجموعة بلا تكرار:

main.go

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

Comprehensions جميلة عندما تكون بسيطة، لكنها تصبح عكسية عندما تتعقد:

main.go

القاعدة العملية: إذا احتجت أن تقرأ الـ Comprehension مرتين لتفهمها، استبدلها بحلقة for عادية. الوضوح أهم من الإيجاز.

Generator Expressions

أخت قريبة من List Comprehension — تنتج القيم واحدة بواحدة بدلاً من بناء القائمة كلها في الذاكرة:

main.go

استخدم Generator Expressions مع sum()، max()، min()، any()، all() — أكثر كفاءة من بناء قائمة مؤقتة ثم تمريرها.

تحدي — Challenge

خلاصة

Comprehensions أداة تعبيرية قوية في Python — تجعل بناء القوائم والقواميس والمجموعات من البيانات الموجودة أوضح وأكثر مباشرةً. الصيغة الأساسية [تعبير for متغير in تسلسل if شرط] تقرأ مثل جملة إنجليزية بسيطة. تعلّم متى تستخدمها ومتى تتركها للحلقة العادية — هذا هو الفارق بين كود Python أنيق وكود يصعب صيانته. في الدرس القادم ستطبّق كل ما تعلمته في بناء سجل درجات حقيقي.