الفرق بين المراجعتين لصفحة: «Python/itertools/product»

من موسوعة حسوب
لا ملخص تعديل
 
سطر 54: سطر 54:
[[تصنيف:Python]]
[[تصنيف:Python]]
[[تصنيف:Python Function]]
[[تصنيف:Python Function]]
[[تصنيف:Python Modules]]
[[تصنيف:Python itertools]]
[[تصنيف:Python itertools]]

المراجعة الحالية بتاريخ 06:14، 19 يونيو 2018

تعيد الدّالة itertools.product()‎ حاصل الضرب الديكارتي (أو الضرب المباشر) للكائنات القابلة للتّكرار المُعطاة.

طريقة العمل مُكافئة لحلقات for المُتداخلة في تعبير مُولّد. مثلًا، الاستدعاء product(A, B)‎ يُعيد ما يُعيده التّعبير ‎((x,y)‎ for‎ x‎ in A‎ for y in B‎)‎.

تدور الحلقات المُتداخلة مثل عدّاد مسافة (odometer) من العنصر على أقصى اليمين مُتقدّمةً عند كلّ تكرار. يُنشئ هذا النّسق ترتيبًا مُعجميًّا (lexicographic)، لذا فإن كانت الكائنات القابلة للتّكرار المُعطاة مُرتّبةً، فستُنتج صفوف الضّرب المُباشر مُرتّبةً.

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

itertools.product(*iterables, repeat=1)

المعاملات

iterables

الكائنات القابلة للتّكرار المرغوب الحصول على حاصل ضرب مُباشر لها.

repeat

لحساب حاصل الضّرب المُباشر لكائن قابل للتّكرار مع نفسه، حدّد عدد مرّات التّكرار المرغوبة بتمرير العدد كقيمة للمُعامل repeat الاختياريّ. فمثلًا، الاستدعاء product(A, repeat=4)‎ هو نفسه الاستدعاء product(A, A, A, A)‎.

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

حاصل ضرب مُباشر بين عناصر الكائنات القابلة للتّكرار المُعطاة.

أمثلة

المثال التّالي يوضّح كيفيّة عمل هذه الدّالة:

>>> list(itertools.product('ABCD', 'xy'))
[('A', 'x'), ('A', 'y'), ('B', 'x'), ('B', 'y'),
 ('C', 'x'), ('C', 'y'), ('D', 'x'), ('D', 'y')]
>>> list(itertools.product(range(2), repeat=3))
[(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1),
 (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]

ملاحظات

الدّالة مُكافئة لما يلي، إلّا أنّ التّطبيق الفعلي لا يبني نتائج وسيطةً في الذّاكرة:

def product(*args, repeat=1):
    # product('ABCD', 'xy') --> Ax Ay Bx By Cx Cy Dx Dy
    # product(range(2), repeat=3) --> 000 001 010 011 100 101 110 111
    pools = [tuple(pool) for pool in args] * repeat
    result = [[]]
    for pool in pools:
        result = [x+[y] for x in result for y in pool]
    for prod in result:
        yield tuple(prod)

انظر أيضًا

مصادر