الدالة filter()
في بايثون
تعيد الدّالة filter()
مُكرّرًا (iterator) من عناصر الكائن القابل للتكرار المُعطى حسب شرطٍ تُحدّده الدّالة المُعطاة. وتُستخدم لترشيح عناصر الكائن القابل للتّكرار.
البنية العامة
filter(function, iterable)
المعاملات
function
الدّالة المُرشّحةُ التي ستُحدّد ما إذا كان العنصر سينضم إلى المُكرّر النّاتج أو لا.
ستستقبل الدّالة العنصر وتُعيد إمّا القيمة True
أو القيمة False
، إن أعادت الدّالة المُرشّحةُ القيمة True
للعنصر المُعطى لها، فسينضمّ إلى المُكرّر النّاتج، ولن ينضمّ عكسَ ذلك.
إن كانت قيمة هذا المُعاملِ القيمةَ None
، فسيُعمل بقواعد التّحقّق من صحّة الكائن كما هو موضّح في صفحة القيم المنطقيّة، أي أنّ جميع العناصر التي تُساوي False
ستُحذف.
iterable
الكائن القابل للتّكرار الذي نريد ترشيحه.
يُمكن أن يكون سلسلةً من القيم، أو مُكرّرًا، أو أي كائن يُمكن الوصول إلى عناصره على حدة باستخدام التّكرار.
القيمة المعادة
مُكرّر يحتوي على العناصر التي أعادت لها الدّالة المُعطاة القيمة True
.
أمثلة
المثال التّالي يوضّح كيفيّة عمل هذه الدّالة، المثال الثّاني يستخدم تعبير lambda:
>>> values = filter(None, [1, 2, 'ABC', 0, None, '', 4]) # مرّرنا قيمة فارغة كدالّة
>>> list(values) # نُحوّل الكائن النّاتج إلى قائمة لنرى عناصره
[1, 2, 'ABC', 4]
>>> numbers = (1, 2, 3, 4, 5)
>>> less_than_three = filter(lambda number: number < 3, numbers) # نُمرّر دالّة لترشيح الأعداد الأصغر من ثلاثة
>>> list(less_than_three)
[1, 2]
>>> def is_even(number): # يُمكن كذلك إنشاء دالّة مُتعدّدة الأسطر
... if number % 2 == 0: # إن كان باقي القسمة على اثنان يُساوي صفر، فالعدد زوجيّ
... return True
... else: # العدد فرديّ إن لم يكن باقي قسمته على اثنان يُساوي صفرًا
... return False
...
>>> is_even(1)
False
>>> is_even(4)
True
>>> is_even(6)
True
>>> nums = [1, 2, 3, 4, 5, 6] # قائمة أعداد
>>> even_nums = filter(is_even, nums) # ترشيح قائمة الأعداد باستخدام الدّالة التي أنشأناها
>>> list(even_nums) # عرض عناصر النّتيجة بعد ترشيح قائمة الأعداد
[2, 4, 6]
ملاحظات
- الدّالة
filter()
مُكافئة لما يلي إن لم تكن قيمة المُعاملfunction
تُساويNone
:
(item for item in iterable if function(item))
- ومُكافئة لما يلي إن كانت قيمة المُعامل
function
تُساويNone
:
(item for item in iterable if item)
انظر أيضًا
- المكرِّرات Iterators في بايثون.
- المولدات Generators في بايثون.
- القوائم lists في بايثون.
itertools.filterfalse()
للترشيح بطريقة مُعاكسة (تُقبل فقط العناصر التي تُعيد الدّالة المُعطاة لها القيمةَFalse
).