यह शब्दों से परिणामों में एक पैटर्न के साथ जवाब देने के लिए (सिवाय आप जानना चाहते हैं आसान है सिद्धांत के गणित भाग), इसलिए प्रिंट आउट करने का सबसे अच्छा तरीका होगा।
सबसे सूक्ष्म बात यह है कि, अंत तक लूपिंग के बाद, यह स्वयं को अंतिम दौर की पहली मोड़ पर रीसेट कर देगा, और अगले लूपिंग को शुरू कर देगा, या आखिरी दौर के पहले दौर में लगातार रीसेट हो जाएगा, घड़ी की तरह
रीसेट काम कर कोड का हिस्सा:
if cycles[i] == 0:
indices[i:] = indices[i+1:] + indices[i:i+1]
cycles[i] = n - i
पूरे: परिणाम के
In [54]: def permutations(iterable, r=None):
...: # permutations('ABCD', 2) --> AB AC AD BA BC BD CA CB CD DA DB DC
...: # permutations(range(3)) --> 012 021 102 120 201 210
...: pool = tuple(iterable)
...: n = len(pool)
...: r = n if r is None else r
...: if r > n:
...: return
...: indices = range(n)
...: cycles = range(n, n-r, -1)
...: yield tuple(pool[i] for i in indices[:r])
...: print(indices, cycles)
...: while n:
...: for i in reversed(range(r)):
...: cycles[i] -= 1
...: if cycles[i] == 0:
...: indices[i:] = indices[i+1:] + indices[i:i+1]
...: cycles[i] = n - i
...: print("reset------------------")
...: print(indices, cycles)
...: print("------------------")
...: else:
...: j = cycles[i]
...: indices[i], indices[-j] = indices[-j], indices[i]
...: print(indices, cycles, i, n-j)
...: yield tuple(pool[i] for i in indices[:r])
...: break
...: else:
...: return
हिस्सा:
In [54]: list(','.join(i) for i in permutations('ABCDE', 3))
([0, 1, 2, 3, 4], [5, 4, 3])
([0, 1, 3, 2, 4], [5, 4, 2], 2, 3)
([0, 1, 4, 2, 3], [5, 4, 1], 2, 4)
reset------------------
([0, 1, 2, 3, 4], [5, 4, 3])
------------------
([0, 2, 1, 3, 4], [5, 3, 3], 1, 2)
([0, 2, 3, 1, 4], [5, 3, 2], 2, 3)
([0, 2, 4, 1, 3], [5, 3, 1], 2, 4)
reset------------------
([0, 2, 1, 3, 4], [5, 3, 3])
------------------
([0, 3, 1, 2, 4], [5, 2, 3], 1, 3)
([0, 3, 2, 1, 4], [5, 2, 2], 2, 3)
([0, 3, 4, 1, 2], [5, 2, 1], 2, 4)
reset------------------
([0, 3, 1, 2, 4], [5, 2, 3])
------------------
([0, 4, 1, 2, 3], [5, 1, 3], 1, 4)
([0, 4, 2, 1, 3], [5, 1, 2], 2, 3)
([0, 4, 3, 1, 2], [5, 1, 1], 2, 4)
reset------------------
([0, 4, 1, 2, 3], [5, 1, 3])
------------------
reset------------------(bigger reset)
([0, 1, 2, 3, 4], [5, 4, 3])
------------------
([1, 0, 2, 3, 4], [4, 4, 3], 0, 1)
([1, 0, 3, 2, 4], [4, 4, 2], 2, 3)
([1, 0, 4, 2, 3], [4, 4, 1], 2, 4)
reset------------------
([1, 0, 2, 3, 4], [4, 4, 3])
------------------
([1, 2, 0, 3, 4], [4, 3, 3], 1, 2)
([1, 2, 3, 0, 4], [4, 3, 2], 2, 3)
([1, 2, 4, 0, 3], [4, 3, 1], 2, 4)
सिर्फ मैं आशा खो रही थी लेकिन हमेशा पर भरोसा कर सकते एलेक्स !! मैं अभी तक पूरी तरह से * ग्रोक * नहीं करता हूं, लेकिन आपके द्वारा दी जाने वाली लीड बहुत अच्छी है, मैं इसके बारे में पढ़ूंगा। बहुत बहुत धन्यवाद। क्या आप जानते हैं कि वास्तव में पाइथन lib में इसे किसने लागू किया? – zaharpopov
रेमंड हेटिंगर: लाइन 2495 देखें और http://svn.python.org/view/python/trunk/Modules/itertoolsmodule.c?annotate=76602 के बाद देखें। –
चक्र सूची क्या दर्शाती है? किसी ऐसे व्यक्ति के रूप में जिसने अमूर्त बीजगणित के 6 सेमेस्टर लिया और सममित समूह और चक्र/कक्षाओं के बारे में बहुत कुछ जानता है, यह नोटेशन (और कोड) का मतलब है कि मेरे लिए लगभग कुछ भी नहीं है। मैं यह नहीं बता सकता कि वास्तव में सामान्य रणनीति क्या है। –