आप itertools.product(..)
का उपयोग कर सकते हैं लेकिन repeat
repeat=len(a)
के लिए निर्दिष्ट कर सकते हैं। तो आप का उपयोग कर सकते हैं:
>>> list(product(b,repeat=len(a)))
[(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
तो यहाँ टपल के पहले तत्व एक है कि a_
से जुड़ा हुआ है, b_
से पीछे से एक है:
from itertools import product
def mul_product(a,b):
for tup in product(b,repeat=len(a)):
yield ' '.join('%s_%s'%t for t in zip(a,tup))
product(..)
तरह tuples उत्पन्न होगा। अब हम उन्हें एक साथ zip(..)
a
सूची के साथ, उत्पादन:
>>> list(map(lambda bi:list(zip(a,bi)),product(b,repeat=len(a))))
[[('a', 1), ('b', 1)], [('a', 1), ('b', 2)], [('a', 1), ('b', 3)], [('a', 2), ('b', 1)], [('a', 2), ('b', 2)], [('a', 2), ('b', 3)], [('a', 3), ('b', 1)], [('a', 3), ('b', 2)], [('a', 3), ('b', 3)]]
अब यह केवल स्वरूपण की बात ('%s_%s'%t
), और ' '.join(..)
उन्हें ining एक साथ और उन्हें yield
है (या आप सूची समझ का उपयोग एक सूची तैयार कर सकते हैं)।
अपने नमूना इनपुट के लिए परिणाम है:
>>> list(mul_product(a,b))
['a_1 b_1', 'a_1 b_2', 'a_1 b_3', 'a_2 b_1', 'a_2 b_2', 'a_2 b_3', 'a_3 b_1', 'a_3 b_2', 'a_3 b_3']
ध्यान दें कि यहां तत्वों lazily उत्पन्न कर रहे हैं। यह उपयोगी हो सकता है यदि आप उदाहरण के लिए केवल पहले k
वाले लोगों में रुचि रखते हैं, या जब आप उन्हें एक साथ में उत्पन्न नहीं करना चाहते हैं।