الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

ماهي دالة Filter وكيف يتم استخدامها (سؤال)

بدأه The.IqCoder في 14 يوليو 2012 · 8 رد · 1,414 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

بعد بحثي والقراءة وغيرها والتعلم

وجدت دالة اسمها filter لا اعرف وضيفتها او كيف يتم كتابتها واستعمالها للمتغيرات

مثل

وهل فيها انواع

وحدت فديو في لغة php فيها انواع

هل في بايثون ايضا يوجد لها انواع ام لا

وممكن امثلة بسيطة وكيف يتم استخدامها ووضيفتها

#2

الدالة filter من إسمها تعمل كالمصفاة وتأخذ معاملين : دالة و تأخذ في المعامل الثاني list أو سلسلة نصية :

filter(function, iterable)

ستقوم بتمرير جميع عناصر الـlist أو سلسلة نصية على الدالة. إذا أعادت الدالة True فإن العنصر يبقى, وإذا أعادت False قإنه يُهمل.

مثلاً لدينا هذه الـlist :

list    = ["1", "One", "2", "Three"]

ونريد أن نبقي فقط على الأرقام 1, 2, 3, 4 .. إلخ. سنكتب دالة تحاول جعل مايمرر لها int, إذا نجحت فستعيد True وإذا فشلت فستعيد False :

def is_int(item):
    try:
        int(item)
        return True
    except ValueError:
        return False

الآن لنجربهما مع filter :

def is_int(item):
    try:
        int(item)
        return True
    except ValueError:
        return False

list     = ["1", "One", "2", "Three"]
print list

new_list =  filter(is_int, list)
print new_list

لو شغلته سترى :

$ python test.py['1', 'One', '2', 'Three']
['1', '2']
$

فعلياً filter تعمل في البرنامج تماماً كما لو كان :

def is_int(item):
    try:
        int(item)
        return True
    except ValueError:
        return False

list     = ["1", "One", "2", "Three"]
print list

new_list =  []
for i in list:
    if is_int(i) == True:
        new_list    += i

print new_list

تم تعديل هذه المشاركة بواسطة Mr.B في 14 يوليو 2012 في 19:19

3
#3

اشكرك اخي على الرد المتواضع والمفهوم احترامي لك وتم فهمه

هل لديك توضيحات اكثر يعني رابط او امثلة

احترامي لك

تم تعديل هذه المشاركة بواسطة The.IqCoder في 15 يوليو 2012 في 00:07

#4

Mr.B كان رده كافي جدا ولكن ربما محتاج بعض الأمثلة الإضافية

فزي ماقال filter هي عبارة عن مصفاة تقوم بتنقية عناصر (قائمة list او string او أي حاوية) حسب شروط تتوفر في ال predicate -وهي دالة تحدد فيها شروطك)

على سبيل المثال نريد الحروف الصغرى - lower case - فقط من string

فعلى فرض لدينا islower معرفة كالتالي

>>> def islower(char):
...     return char.islower()==True
... 
>>> islower("c")
True
>>> islower("D")
False
>>> islower("c")
True

الآن نريد تمرير مجموعة حروف string ونقوم بتنقية الحروف الصغرى فقط (التي تحقق islower)

>>> filter(islower, "Maximum PoWeR")
'aximumoe'

الأسلوب المعتاد للكتابة هو

>>> onlylowercase=""
>>> for c in "Maximum PoWeR":
...     if c.islower():
...             onlylowercase += c
... 
>>> onlylowercase
'aximumoe'

مثال آخر على الأعداد الزوجية

الأعداد الزوجية هي مايقسم القسمة على اتنين

فيكون لدينا ال predicate كالتالي

>>> def iseven(number):
...     if number%2==0:
...             return True
...     return False
... 
>>> iseven(2)
True
>>> iseven(3)
False

كل ماعلينا هو تمرير القائمة التي نريد فلترتها (تنقيتها) حسب ال predicate

>>> numbers=[1, 2, 3, 24, 35, 17]
>>> filter(iseven, numbers)
[2, 24]

تستطيع عمل أمثلة أخرى مثل التنقية للحروف الكبرى uppercase او تنقية للأرقام الفردية او تنقية لأرقام اكبر من ألف مثلا ممررة في قائمة وهكذا

1
(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

#5

اموضوع جميل جدا والله ومفيد

تم تعديل هذه المشاركة بواسطة Python new في 17 يوليو 2012 في 18:15

#6

اذا كان كلمة فيها رموز كيف اجعلها تنقي فقط الحروف

مثل "ah#@m3ed"

#7

إنظر لهذا المثال :

from string import ascii_letters

def is_letter(c):
    if c in ascii_letters:
        return True
    return False

print filter(is_letter, "ah#@m3ed") # prints 'ahmed'
#8

شكرا لك اخي على مساعدتك لنا الجميلة

f c in ascii_lettersلماذا كتبنا كذا

لماذا لانكتب هكذا f c .ascii_letters:

تم تعديل هذه المشاركة بواسطة The.IqCoder في 18 يوليو 2012 في 01:55

#9
اقتباس

f c in ascii_lettersلماذا كتبنا كذا

لماذا لانكتب هكذا f c .ascii_letters:

لان ascii_letters هي string

>>> from string import ascii_letters
>>> print ascii_letters
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ

وليست وظيفة method لتتمكن من استدعائها على string

(map share people)

فضلا لاتقم بمراسلتي من أجل أسئلة لها أقسامها في المنتدى حتى تعم الفائدة على الجميع وللحصول على إجابات أفضل من أعضاء أكثر خبرة.
Weblog
@bitbucket
@xmonader

مواضيع مشابهة