असल में, समस्या दो सूचियों के बीच सामान्य तत्वों के साथ उत्पन्न होती है। आप आम और अद्वितीय तत्वों के संयोजन के मामलों को अलग कर सकते हैं, आप अपनी समस्या
का समाधान होगा यानी आप कार्तीय उत्पादों निम्नलिखित बनाने के लिए
a_unique X b_unique
a_unique X b_common
a_common X b_unique
a_common X b_common
चार मामलों में से
, पिछले एक एक समस्या पैदा होगा की जरूरत है क्योंकि यह गैर-अद्वितीय जोड़े बनाएगा। एक दूसरे विचार पर, अद्वितीय जोड़े के साथ अंतिम कार्टेशियन acommon से 2 तत्वों का एक साधारण चयन है।
अंत में, अलग-अलग रखने तत्वों एक सेट बनाने के द्वारा और दोनों सूचियों की और फिर बार-बार दोहराना किया जा सकता है, जबकि
>>> #Sample Lists
>>> a = ['C0','C1','C2','A0','A1','A2']
>>> b = ['C0','C1','C2','B0','B1','B2']
>>> from itertools import product, combinations, chain
>>> # Create sets for O(1) lookup
>>> a_key = set(a)
>>> b_key = set(b)
>>> # Segerate elements to unique and common for both lists
>>> a = {'common':a_key & b_key,
'unique':a_key - common}
>>> b = {'common':a_key & b_key,
'unique':b_key - common}
>>> # Create cartesian products forall the cases
>>> list(chain.from_iterable([product(a['unique'], b['unique']),
product(a['unique'], b['common']),
product(a['common'], b['unique']),
combinations(a['common'], 2)]))
[('A0', 'B0'), ('A0', 'B1'), ('A0', 'B2'), ('A1', 'B0'), ('A1', 'B1'), ('A1', 'B2'), ('A2', 'B0'), ('A2', 'B1'), ('A2', 'B2'), ('A0', 'C0'), ('A0', 'C1'), ('A0', 'C2'), ('A1', 'C0'), ('A1', 'C1'), ('A1', 'C2'), ('A2', 'C0'), ('A2', 'C1'), ('A2', 'C2'), ('C0', 'B0'), ('C0', 'B1'), ('C0', 'B2'), ('C1', 'B0'), ('C1', 'B1'), ('C1', 'B2'), ('C2', 'B0'), ('C2', 'B1'), ('C2', 'B2'), ('C0', 'C1'), ('C0', 'C2'), ('C1', 'C2')]
क्या सूची में डुप्लिकेट तत्व होने के लिए यह संभव है? जैसे ए = [टीएफ 1, टैर 1, टीएफ 1] – Gargamel
@ गर्गमेल उसका उदाहरण देखें। – simonzack
मैंने किया, लेकिन यह मेरे प्रश्न का उत्तर नहीं देता है, जब तक कि मुझे कुछ याद नहीं आ रहा है? – Gargamel