في هذا الدرس، سنشرح طرقًا مختلفة لتصفية قائمة في بايثون بمساعدة أمثلة متعددة. ستتعلم كيفية استخدام دالة filter()
وفهم القائمة، واستخدام حلقة for أيضًا لتحديد عناصر من القائمة.
تصفية قائمة في بايثون بمساعدة الأمثلة
كما نعلم، هناك عدة طرق لتصفية قائمة في بايثون، ولكل منها مزاياها وتعقيداتها الخاصة. لذا، أولاً، دعنا نلقي نظرة على الخيار الأكثر وضوحًا وهو دالة filter()
.
استخدام دالة filter()
هذه هي الطريقة الأكثر شيوعًا وفعالية لتصفية القائمة. وهي تتطلب وسيطتين: دالة تحدد ما إذا كان سيتم الاحتفاظ بعنصر (يجب أن تعيد القيمة True أو False) والقائمة المراد تصفيتها. تعيد دالة filter()
مُكررًا للعناصر التي يلبي الشرط.
1 2 3 4 5 6 7 8 9 10 11 12 | nums = [11, 22, 31, 42, 51] def is_num_odd(z): return z % 2 != 0 out_nums = filter(is_num_odd, nums) # Convert the iterator to a list out_nums = list(out_nums) print(out_nums) # Output: [11, 31, 51] |
استخدام فهم القائمة
هذه طريقة مختصرة لتصفية قائمة بايثون وتحويلها في سطر واحد. وهي أكثر مرونة من filter()
ولكنها أقل كفاءة قليلاً.
1 2 3 4 5 6 | nums = [11, 22, 31, 42, 51] result = [x for x in nums if x % 2 == 0] print(result) # Output: [22, 42] |
استخدام حلقة
هذه هي الطريقة الأقل كفاءة ولكنها قد تكون مفيدة للمهام البسيطة.
1 2 3 4 5 6 7 8 9 10 | nums = [11, 22, 31, 42, 51] outNums = [] for n in nums: if n % 2 == 0: outNums.append(n) print(outNums) # Output: [22, 42] |
استخدام دوال أخرى مدمجة
يمكن استخدام العديد من الدوال المضمنة الأخرى لمهام تصفية محددة، مثل min()
، أو max()
، أو any()
.
اختيار الطريقة الصحيحة:
- بالنسبة لشروط التصفية البسيطة، استخدم فهم القائمة أو الحلقة.
- بالنسبة للظروف الأكثر تعقيدًا أو المرشحات القابلة لإعادة الاستخدام، استخدم الدالة
filter()
. - بالنسبة للمهام المحددة مثل العثور على الحد الأدنى أو الحد الأقصى، استخدم الدالة المضمنة المناسبة.
تذكر أنه يجب عليك أن تأخذ في الاعتبار كفاءة ووضوح كود بايثون الخاص بك عند اختيار طريقة لتصفية القائمة.
فهم تصفية القائمة من خلال الأمثلة
دعنا نحاول فهم المزيد عن التصفية في بايثون بما يتجاوز أمثلة الأرقام الأساسية. دعنا نستكشف بعض السيناريوهات الفريدة:
استخراج بيانات محددة من قائمة القواميس:
تخيل أن لديك قائمة بطلبات العملاء تحتوي على قواميس تحتوي على عناصر مثل الاسم والبريد الإلكتروني وتفاصيل الطلب. تريد تصفية الطلبات المقدمة في مدينة معينة:
1 2 3 4 5 6 7 8 9 10 | orders = [ {"name": "Alice", "email": "alice@example.com", "city": "London"}, {"name": "Bob", "email": "bob@example.com", "city": "Paris"}, {"name": "Charlie", "email": "charlie@example.com", "city": "Tokyo"}, ] london_orders = [order for order in orders if order["city"] == "London"] print(london_orders) # Output: [{'name': 'Alice', 'email': 'alice@example.com', 'city': 'London'}] |
التصفية بناءً على المنطق المخصص
لنفترض أن لديك قائمة بمراجعات لفيلم، كل منها يحتوي على تقييم ونص. تريد تصفية المراجعات الإيجابية باستخدام كلمات رئيسية مرتبطة بـ “الفكاهة” أو “التمثيل”:
1 2 3 4 5 6 7 8 9 10 | reviews = [ {"rating": 4, "text": "Hilarious! I laughed so much."}, {"rating": 3, "text": "Good plot, but predictable ending."}, {"rating": 5, "text": "A masterpiece of acting and storytelling."}, ] positive_humorous_reviews = [review for review in reviews if review["rating"] > 3 and ("laugh" in review["text"] or "acting" in review["text"])] print(positive_humorous_reviews) # Output: [{'rating': 4, 'text': 'Hilarious! I laughed so much.'}, {'rating': 5, 'text': 'A masterpiece of acting and storytelling.'}] |
التصفية باستخدام التعبيرات العادية
يمكنك التصفية استنادًا إلى الأنماط المعقدة باستخدام التعبيرات العادية. على سبيل المثال، استخراج عناوين البريد الإلكتروني من قائمة إدخالات نصية:
1 2 3 4 5 6 7 8 9 10 11 12 | import re texts = [ "My email is johndoe@example.com.", "Contact me at johnsmith123@gmail.com", "This website has no contact information." ] emails = [re.findall(r"[\w.]+@\w+\.\w+", text) for text in texts] print(emails) # Output: [['johndoe@example.com'], ['johnsmith123@gmail.com']] |
هذه مجرد أمثلة قليلة، والاحتمالات لا حصر لها! يمكنك تكييف هذه التقنيات لتصفية هياكل البيانات المختلفة وتطبيق المنطق المخصص على مواقف محددة.
نأمل أن تكون الأمثلة والشروحات المذكورة أعلاه مفيدة! إذا كانت لديك أي مهمة محددة في ذهنك، فلا تتردد في طرحها باستخدام مربع التعليقات.
ليست هناك تعليقات:
إرسال تعليق