الدالة 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)

انظر أيضًا

مصادر