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

السؤال

نشر

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

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...