الدالة itertools.dropwhile()‎ في بايثون

من موسوعة حسوب

تعيد الدّالة itertools.dropwhile()‎ مُكرّرًا يُزيل العناصرَ من الكائن القابل للتّكرار المعطى ما دامت العبارة المنطقيّة المُعطاة (التي تكون دالّة تستقبل العنصر وتُعيد قيمة منطقيّة) تُساوي القيمة المنطقيّة True؛ بعد أن تُخالف العبارة المنطقيّة قيمةً منطقيّة صحيحة، يستمرّ المُكرّر بإعادة العناصر المتبقيّة كلّها.

لاحظ أنّ المُكرّر لا يُنتج أي مُخرجات حتى تُساوي العبارة المنطقيّة القيمةَ False، ما يعني أنّه قد يحتاج إلى وقت طويل للبدء في إعادة القيم.

البنية العامة

itertools.dropwhile(predicate, iterable)

المعاملات

predicate

العبارة المنطقيّة التي ستُحدّد ما إذا كان المُكرّر سيتوقّف عن تجاهل العناصر ويبدأ في إعادة بقيّة العناصر أو لا.

عادة ما تكون دالّة تستقبل العنصر، إن أعادت القيمة True فسيُتجاهل العنصر، وما إن تُعيد القيمةَ False حتى يبدأ المُكرّر بإعادة جميع العناصر المُتبقيّة كلّها.

iterable

الكائن القابل للتّكرار المرغوب إزالة العناصر منه ما دامت قيمة predicate المُعادَة تُساوي True.

القيمة المعادة

مُكرّر يحتوي على جميع العناصر منذ العنصر الذي أُعيدت له العبارة المنطقيّة القيمةَ False.

أمثلة

المثال التّالي يوضّح كيفيّة عمل هذه الدّالة، هنا يُعيد المُكرّر جميع العناصر بدءًا من العنصر 6 لأنّه لا يُحقّق شرط تعبير lambda المُعطى:

>>> import itertools
>>> it = itertools.dropwhile(lambda x: x<5, [1,4,6,4,1])
>>> list(it)
[6, 4, 1]

لاحظ أنّ طريقة استعمال الدّالة مُشابهة لطريقة استعمال الدّالة filter()‎.

ملاحظات

الدّالة مُكافئة لما يلي:

def dropwhile(predicate, iterable):
    # dropwhile(lambda x: x<5, [1,4,6,4,1]) --> 6 4 1
    iterable = iter(iterable)
    for x in iterable:
        if not predicate(x):
            yield x
            break
    for x in iterable:
        yield x

انظر أيضًا

مصادر