اذهب إلى المحتوى
  • 0

كيفية تطبيق الضرب الديكارتي في قوائم بايثون؟

Adam Ebrahim

السؤال

كيف أقوم بضرب مجموعة من القاوائم للحصول على كل الإحتمالات الممكنة الناتجة عن ضرب هذه القوائم، على سبيل المثال لدي القائمة التالية:

sections = [ [1, 2, 3], [4, 5], [6, 7] ]

كيف أحصل على مجموعة من القائم كالتالي:

[

[1, 4, 6],
[1, 4, 7],
[1, 5, 6],
[1, 5, 7],
  
[2, 4, 6],
[2, 4, 7],
[2, 5, 6],
[2, 5, 7],
  
[3, 4, 6],
[3, 4, 7],
[3, 5, 6],
[3, 5, 7]

]

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 1

يمكنك إستدعاء هذه الحزمة itertools.product و هي متاحة في بايثون من إصدار 2.6


import itertools

sections = [ [1, 2, 3], [4, 5], [6, 7] ]

for element in itertools.product(*sections):
    print(element)

وهذا الكود مشابه للكود السابق

for element in itertools.product([1, 2, 3], [4, 5], [6, 7]):
    print(element)

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 1

أول طريقة من خلال استخدام النهج التكراري (الحلقات التكرارية):

# باستخدام الحلقات التكرارية
def cartesian_iterative(list):
  result = [[]]
  for l in list:
    result = [x+[y] for x in result for y in l]
  return result
# الآن يمكننا استخدام التابع السابق لتنفيذ الجداء الديكارتي على القوائم
sections = [ [1, 2, 3], [4, 5], [6, 7] ]
cartesian_iterative(sections)

من خلال استخدام lambda و reduce:

# تعريف التابع
def prod(pools):
  import functools
  from itertools import product
  return list(functools.reduce(lambda x,y: product(x,y) , pools))
# استخدامه
prod(sections)  

أو من خلال العودية:

# تعريف التابع
def product(ar_list):
    if not ar_list:
        yield ()
    else:
        for a in ar_list[0]:
            for prod in product(ar_list[1:]):
                yield (a,)+prod
# لاستخدامه
list(product(sections))  

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...