पाइथन - पायथन, रिकर्सन के साथ इस सरल रिकर्सन को नहीं समझ सकता

शायद यह इतना आसान नहीं है, लेकिन मैं अनिवार्य रूप से अक्षरों की सूची के सभी क्रमपरिवर्तनों को खोजने की कोशिश कर रहा हूं।

[[a,b],[c,d],[e,f]] सादगी के लिए क्योंकि यह 2 की केवल 3 सूचियों से अधिक हो सकता है (यानी 3 अक्षरों की 6 सूचियां इत्यादि)।

मैं चाहता हूं कि मेरा कार्यक्रम मुख्य सूची के क्रम को बनाए रखते हुए उपर्युक्त उदाहरण के लिए सभी 8 संयोजन ढूंढें (क्या वह क्रमपरिवर्तन है?)।

इक्का
एसीएफ़
एडीई
एडीएफ
ईसा पूर्व
बीसीएफ
bde
bdf

वर्तमान में मुझे लगता है कि नीचे दिया गया समाधान फिर से शुरू होगामैं चाहता हूं कि संयोजन के माध्यम से recursively; हालांकि, मैं यह नहीं समझ सकता कि उन्हें कैसे स्टोर किया जाए क्योंकि जब यह पहली पंक्ति के लिए आधार स्थिति तक पहुंच जाता है तो यह सूची के अंतिम सूचकांक में अगले पत्र पर जायेगा।

मुझे विश्वास नहीं है कि मैं ऐसा कुछ ढूंढने में सक्षम था जो मेरे लिए काम करेगा itertools

def find_comb(mylist):

for curr_index in range(0,len(mylist)):

for letter in mylist[curr_index]:

if (curr_index+1<=len(mylist)):
next_letter=find_comb(mylist[curr_index+1:])

return 1     #wrote 1 for now because I am stumped

उत्तर:

उत्तर № 1 के लिए 1

मुझे लगता है कि आप क्या चाहते हैं itertools.product

from itertools import product

x = [["a","b"], ["c","d"], ["e","f"]]

for _ in product(*x):
print _

प्रिंटों

("a", "c", "e")
("a", "c", "f")
("a", "d", "e")
("a", "d", "f")
("b", "c", "e")
("b", "c", "f")
("b", "d", "e")
("b", "d", "f")

आपकी टिप्पणी के बारे में:

product पुनरावृत्तियों का एक गुच्छा लेता है और उनके उत्पाद को उत्पन्न करता है, हालांकि, आपके मामले में आप इसे एक ही पुनरावर्तनीय भेज रहे थे (जिसमें अधिक पुनरावृत्तियों शामिल थे)। तो गुजरने के बजाय l1, l2, l3 आप में गुजर रहे थे[l1, l2, l3]

वास्तव में तीन पुनरावृत्तियों में प्रवेश करने के लिए, हमें तारांकन का उपयोग करके सूची को अनपैक करना होगा, जो कि एकल सूची को तीन तर्कों में बदल देगा। उस पर और अधिक के लिए, देखें ** (डबल स्टार) और * (स्टार) पैरामीटर के लिए क्या करता है?


संबंधित सवाल
सबसे लोकप्रिय