في دروس القوائم السابقة تعلمنا أن List في Python تستخدم لتخزين أكثر من قيمة داخل متغير واحد. لكن في المشاريع العملية غالبًا لا نحتاج كل العناصر الموجودة في القائمة، بل نحتاج استخراج عناصر معينة فقط حسب شرط محدد. هنا تظهر فكرة مهمة اسمها فلترة عناصر القائمة.
في هذا الدرس من سلسلة بايثون بالمثال سنتعلم كيف نفلتر عناصر List باستخدام for و if بطريقة بسيطة جدًا. سنبدأ بالأرقام، ثم النصوص، ثم نرى طريقة مختصرة باستخدام List Comprehension في نهاية الدرس.
{getToc} $title={محتوى المقال}
الفكرة ببساطة: فلترة القائمة تعني المرور على العناصر واختيار العناصر التي تحقق شرطًا معينًا فقط، ثم وضعها في قائمة جديدة. {alertInfo}
ما معنى فلترة عناصر List في Python؟
فلترة القائمة تعني أنك تملك قائمة تحتوي على عناصر كثيرة، ثم تريد استخراج جزء منها فقط. مثلًا لديك قائمة أرقام، وتريد استخراج الأرقام الأكبر من 10 فقط. أو لديك قائمة أسماء، وتريد استخراج الأسماء التي تبدأ بحرف معين.
الفكرة تشبه أنك تقول لبايثون:
- مر على كل عنصر داخل القائمة.
- افحص هل هذا العنصر يحقق الشرط.
- إذا تحقق الشرط، أضفه إلى قائمة جديدة.
- إذا لم يتحقق الشرط، تجاهله.
الشكل العام لفلترة List
قبل أن نبدأ بالأمثلة، لنفهم الشكل العام للفكرة:
new_list = []
for item in old_list:
if condition:
new_list.append(item)
هذا هو الأسلوب الأساسي والمهم للمبتدئين. نبدأ بقائمة فارغة، ثم نمر على عناصر القائمة الأصلية، وإذا تحقق الشرط نضيف العنصر إلى القائمة الجديدة باستخدام append.
مثال 1: استخراج الأرقام الأكبر من 10
لنفترض أن لدينا قائمة أرقام، ونريد استخراج الأرقام الأكبر من 10 فقط.
numbers = [3, 12, 7, 20, 5, 18]
filtered_numbers = []
for number in numbers:
if number > 10:
filtered_numbers.append(number)
print(filtered_numbers)
الناتج:
[12, 20, 18]
في هذا المثال مررنا على كل رقم داخل القائمة. إذا كان الرقم أكبر من 10، أضفناه إلى القائمة الجديدة. أما الأرقام الصغيرة مثل 3 و 7 و 5 فقد تجاهلها البرنامج.
شرح الكود خطوة بخطوة
لنقسم المثال السابق إلى أجزاء صغيرة:
| السطر | الشرح |
|---|---|
numbers = [...] |
أنشأنا قائمة تحتوي على مجموعة أرقام. |
filtered_numbers = [] |
أنشأنا قائمة فارغة لحفظ الأرقام التي تحقق الشرط. |
for number in numbers |
مررنا على كل رقم داخل القائمة الأصلية. |
if number > 10 |
فحصنا هل الرقم أكبر من 10. |
append(number) |
أضفنا الرقم إلى القائمة الجديدة إذا تحقق الشرط. |
مثال 2: استخراج الأرقام الزوجية فقط
الآن نريد استخراج الأرقام الزوجية من قائمة. الرقم الزوجي هو الرقم الذي يقبل القسمة على 2 بدون باقي. في Python نستخدم العامل % لمعرفة باقي القسمة.
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
even_numbers = []
for number in numbers:
if number % 2 == 0:
even_numbers.append(number)
print(even_numbers)
الناتج:
[2, 4, 6, 8]
تذكير مهم: العامل % يعيد باقي القسمة. إذا كان باقي قسمة الرقم على 2 يساوي 0، فهذا يعني أن الرقم زوجي. {alertInfo}
مثال 3: استخراج الأرقام الفردية فقط
بنفس الفكرة نستطيع استخراج الأرقام الفردية. الفرق الوحيد أن الشرط يصبح: إذا كان باقي القسمة على 2 لا يساوي 0.
numbers = [1, 2, 3, 4, 5, 6, 7, 8]
odd_numbers = []
for number in numbers:
if number % 2 != 0:
odd_numbers.append(number)
print(odd_numbers)
الناتج:
[1, 3, 5, 7]
مثال 4: فلترة الأسماء التي تبدأ بحرف معين
فلترة القوائم لا تقتصر على الأرقام فقط. يمكننا أيضًا فلترة النصوص. في المثال التالي لدينا قائمة أسماء، ونريد استخراج الأسماء التي تبدأ بحرف A.
names = ["Ali", "Sara", "Ahmed", "Omar", "Amal"]
a_names = []
for name in names:
if name.startswith("A"):
a_names.append(name)
print(a_names)
الناتج:
['Ali', 'Ahmed', 'Amal']
استخدمنا هنا الدالة startswith، وهي تفحص هل النص يبدأ بحرف أو كلمة معينة.
مثال 5: استخراج الكلمات الطويلة من قائمة
لنفترض أن لدينا قائمة كلمات، ونريد استخراج الكلمات التي طولها أكبر من 5 أحرف. هنا سنستخدم الدالة len لمعرفة طول كل كلمة.
words = ["book", "python", "code", "programming", "list"]
long_words = []
for word in words:
if len(word) > 5:
long_words.append(word)
print(long_words)
الناتج:
['python', 'programming']
مثال 6: فلترة درجات الطلاب
هذا مثال عملي أكثر. لدينا قائمة درجات، ونريد استخراج الدرجات الناجحة فقط. لنفترض أن درجة النجاح هي 50 أو أكثر.
grades = [35, 60, 82, 45, 90, 50]
passed_grades = []
for grade in grades:
if grade >= 50:
passed_grades.append(grade)
print(passed_grades)
الناتج:
[60, 82, 90, 50]
هذا النوع من الفلترة مفيد في برامج الطلاب، التقارير، الجداول، وتحليل البيانات البسيطة.
مثال 7: فلترة قائمة تحتوي على قواميس
بعد أن تفهم الفكرة مع الأرقام والنصوص، يمكنك تطبيقها على بيانات أكثر تنظيمًا. مثلًا لدينا قائمة منتجات، وكل منتج محفوظ داخل قاموس Dictionary. نريد استخراج المنتجات التي سعرها أقل من 100.
products = [
{"name": "Keyboard", "price": 80},
{"name": "Mouse", "price": 30},
{"name": "Monitor", "price": 250},
{"name": "USB Cable", "price": 10}
]
cheap_products = []
for product in products:
if product["price"] < 100:
cheap_products.append(product)
print(cheap_products)
الناتج:
[{'name': 'Keyboard', 'price': 80}, {'name': 'Mouse', 'price': 30}, {'name': 'USB Cable', 'price': 10}]
هنا لم نفلتر أرقامًا فقط، بل فلترنا عناصر كاملة من القائمة بناءً على قيمة داخل كل قاموس. هذه الفكرة مهمة جدًا عندما تبدأ التعامل مع بيانات حقيقية.
متى تستخدم الفلترة في مشاريعك؟
فلترة القوائم من أكثر الأفكار التي ستستخدمها في مشاريع Python. ستحتاجها عندما يكون لديك بيانات كثيرة وتريد عرض جزء محدد منها فقط.
| الموقف | مثال عملي |
|---|---|
| فلترة الأرقام | استخراج الدرجات الناجحة أو الأسعار الأقل من قيمة معينة. |
| فلترة النصوص | استخراج الكلمات الطويلة أو الأسماء التي تبدأ بحرف معين. |
| فلترة المنتجات | عرض المنتجات الرخيصة أو المنتجات المتوفرة فقط. |
| فلترة المهام | عرض المهام غير المكتملة في برنامج To-Do List. |
| فلترة البيانات | استخراج السجلات التي تحقق شرطًا معينًا من ملف CSV أو JSON. |
الطريقة المختصرة: List Comprehension
بعد أن تفهم طريقة for و if جيدًا، يمكنك استخدام طريقة مختصرة اسمها List Comprehension. هذه الطريقة تكتب الفلترة في سطر واحد.
الكود التالي:
numbers = [3, 12, 7, 20, 5, 18]
filtered_numbers = []
for number in numbers:
if number > 10:
filtered_numbers.append(number)
يمكن كتابته بشكل مختصر هكذا:
numbers = [3, 12, 7, 20, 5, 18]
filtered_numbers = [number for number in numbers if number > 10]
print(filtered_numbers)
الناتج:
[12, 20, 18]
نصيحة مهمة: إذا كنت مبتدئًا، افهم طريقةforوifأولًا، ثم انتقل إلىList Comprehensionلأنها مختصرة لكنها قد تكون مربكة في البداية. {alertSuccess}
مقارنة بين الطريقة العادية و List Comprehension
| الطريقة | متى تستخدمها؟ | مميزاتها |
|---|---|---|
| for و if | عند التعلم أو عندما يكون الشرط طويلًا. | واضحة وسهلة الفهم للمبتدئين. |
| List Comprehension | عندما تكون الفكرة بسيطة وتريد كودًا أقصر. | مختصرة وشائعة في كود Python. |
أخطاء شائعة عند فلترة List
1. نسيان إنشاء القائمة الجديدة
أحيانًا يكتب المبتدئ append على قائمة غير موجودة:
numbers = [1, 2, 3]
for number in numbers:
if number > 1:
filtered.append(number)
الصحيح أن تنشئ القائمة أولًا:
filtered = []
2. استخدام = بدل == داخل الشرط
داخل if نستخدم == للمقارنة، وليس =. الرمز = يستخدم للإسناد.
# خطأ
if number = 10:
print(number)
# صحيح
if number == 10:
print(number)
3. تعديل القائمة الأصلية أثناء المرور عليها
من الأفضل عند الفلترة أن تنشئ قائمة جديدة بدل حذف عناصر من القائمة الأصلية أثناء استخدام for. هذا يجعل الكود أوضح ويجنبك نتائج غير متوقعة.
4. نسيان اختلاف الحروف الكبيرة والصغيرة
عند فلترة النصوص الإنجليزية، انتبه أن "Ali" لا تساوي "ali". يمكنك استخدام lower لتوحيد النص قبل المقارنة.
names = ["Ali", "ahmed", "Amal"]
result = []
for name in names:
if name.lower().startswith("a"):
result.append(name)
print(result)
تدريب عملي
حاول حل هذه التمارين بنفسك قبل النظر إلى الحل:
- أنشئ قائمة أرقام واستخرج منها الأرقام الأكبر من 50.
- أنشئ قائمة أسماء واستخرج الأسماء التي طولها أكبر من 4 أحرف.
- أنشئ قائمة كلمات واستخرج الكلمات التي تحتوي على حرف
a. - أنشئ قائمة درجات واستخرج الدرجات الراسبة الأقل من 50.
- أنشئ قائمة منتجات تحتوي على قواميس، واستخرج المنتجات التي سعرها أكبر من 100.
حل مختصر للتدريب
numbers = [20, 55, 70, 10, 90]
big_numbers = []
for number in numbers:
if number > 50:
big_numbers.append(number)
print(big_numbers)
الناتج:
[55, 70, 90]
روابط داخلية مفيدة من بايثون العرب
- كورس أساسيات بايثون للمبتدئين
- سلسلة بايثون بالمثال
- بايثون بالمثال 10: البحث عن عنصر داخل List
- سلسلة بايثون بعد الأساسيات
مصادر خارجية مفيدة للتوسع
الخلاصة
فلترة عناصر List في Python مهارة مهمة جدًا؛ لأنها تساعدك على استخراج العناصر التي تحتاجها فقط من القائمة. الفكرة الأساسية بسيطة: تنشئ قائمة جديدة، تمر على العناصر باستخدام for، تفحص الشرط باستخدام if، ثم تضيف العنصر المناسب باستخدام append.
بعد أن تفهم الطريقة العادية جيدًا، يمكنك استخدام List Comprehension لكتابة الكود بشكل أقصر. لكن لا تستعجل الطريقة المختصرة قبل أن تفهم الفكرة الأساسية، لأن وضوح الكود أهم من اختصاره.
الخلاصة العملية: إذا كان لديك List وتريد استخراج عناصر معينة فقط، استخدمforوifثم احفظ العناصر المناسبة في قائمة جديدة. {alertSuccess}
أسئلة شائعة مع إجاباتها
ما معنى فلترة List في Python؟
تعني استخراج عناصر معينة من القائمة بناءً على شرط محدد، مثل استخراج الأرقام الأكبر من 10 أو الكلمات التي تبدأ بحرف معين.
هل يجب إنشاء قائمة جديدة عند الفلترة؟
في أغلب الحالات نعم، خصوصًا للمبتدئين. إنشاء قائمة جديدة يجعل الكود أوضح ويجنبك مشاكل تعديل القائمة الأصلية أثناء المرور عليها.
ما الفرق بين append و filter؟
append تضيف عنصرًا إلى قائمة، أما filter فهي دالة مدمجة يمكن استخدامها للفلترة بطريقة مختلفة. في هذا الدرس ركزنا على الطريقة الأبسط باستخدام for و if.
هل List Comprehension أفضل من for و if؟
ليست دائمًا أفضل. هي أقصر عندما يكون الشرط بسيطًا، لكن طريقة for و if أوضح للمبتدئين وأسهل عند الشرح أو عند وجود منطق أطول.
هل يمكن فلترة قائمة نصوص؟
نعم. يمكنك فلترة النصوص حسب البداية أو الطول أو وجود كلمة أو حرف معين باستخدام دوال مثل startswith و len و in.
هل يمكن فلترة قائمة قواميس؟
نعم. يمكنك فلترة قائمة تحتوي على قواميس بناءً على قيمة معينة داخل كل قاموس، مثل السعر أو الحالة أو الاسم.



