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

من موسوعة حسوب
إضافة الصّفحة
 
لا ملخص تعديل
سطر 2: سطر 2:
تعيد الدّالة <code>itertools.product()‎</code> حاصل الضرب الديكارتي (أو الضرب المباشر) للكائنات القابلة للتّكرار المُعطاة.
تعيد الدّالة <code>itertools.product()‎</code> حاصل الضرب الديكارتي (أو الضرب المباشر) للكائنات القابلة للتّكرار المُعطاة.


طريقة العمل مُكافئة لحلقات for المُتداخلة في تعبير مُولّد. مثلًا، الاستدعاء <code>product(A, B)‎</code> يُعيد ما يُعيده التّعبير <code>‎((x,y)‎ for‎ x‎ in A‎ for y in B‎)‎</code>.
طريقة العمل مُكافئة [[Python/for|لحلقات for]] المُتداخلة في [[Python/generators|تعبير مُولّد]]. مثلًا، الاستدعاء <code>product(A, B)‎</code> يُعيد ما يُعيده التّعبير <code>‎((x,y)‎ for‎ x‎ in A‎ for y in B‎)‎</code>.
 
تدور الحلقات المُتداخلة مثل عدّاد مسافة (odometer) من العنصر على أقصى اليمين مُتقدّمةً عند كلّ تكرار. يُنشئ هذا النّسق ترتيبًا مُعجميًّا (lexicographic)، لذا فإن كانت الكائنات القابلة للتّكرار المُعطاة مُرتّبةً، فستُنتج صفوف الضّرب المُباشر مُرتّبةً.
 


تدور الحلقات المُتداخلة مثل عدّاد مسافة (odometer) من العنصر على أقصى اليمين مُتقدّمةً عند كلّ تكرار. يُنشئ هذا النّسق ترتيبًا مُعجميًّا (lexicographic)، لذا فإن كانت الكائنات القابلة للتّكرار المُعطاة مُرتّبةً، فستُنتج [[Python/tuples|صفوف]] الضّرب المُباشر مُرتّبةً.
== البنية العامة ==
== البنية العامة ==
<syntaxhighlight lang="python3">
<syntaxhighlight lang="python3">
سطر 20: سطر 18:


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


== أمثلة ==
== أمثلة ==

مراجعة 09:31، 16 يونيو 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)

انظر أيضًا

مصادر