दी गई स्ट्रिंग के सभी संभावित क्रमपरिवर्तन खोजने के लिए, आप itertools मॉड्यूल का उपयोग कर सकते हैं जिसमें एक उपयोगी मेथड permutations(iterable[, r]) होता है। यह मेथड इटरेबल में तत्वों के क्रमिक r-लंबाई क्रमपरिवर्तनों को टुपल्स के रूप में लौटाता है।
सभी क्रमपरिवर्तनों को स्ट्रिंग के रूप में प्राप्त करने के लिए, आपको फ़ंक्शन कॉल पर पुनरावृति करके टुपल्स को जोड़ना होगा। उदाहरण के लिए:
>>> from itertools import permutations
>>> print([''.join(p) for p in permutations('dune')])
['dune', 'duen', 'dnue', 'dneu', 'deun', 'denu', 'udne', 'uden', 'unde', 'uned', 'uedn', 'uend', 'ndue', 'ndeu', 'nude', 'nued', 'nedu', 'neud', 'edun', 'ednu', 'eudn', 'eund', 'endu', 'enud']
यदि आप बिल्ट-इन मेथड का उपयोग नहीं करना चाहते, बल्कि अपना खुद का बनाना चाहते हैं, तो आप निम्न पुनरावर्ती समाधान का उपयोग कर सकते हैं:
def permutations(string, step=0):
if step == len(string):
# हम अंत तक पहुंच गए हैं, क्रमपरिवर्तन प्रिंट करें
print("".join(string))
for i in range(step, len(string)):
# स्ट्रिंग को कॉपी करें (सरणी के रूप में स्टोर करें)
string_copy = [c for c in string]
# वर्तमान इंडेक्स को स्टेप के साथ स्वैप करें
string_copy[step], string_copy[i] = string_copy[i], string_copy[step]
# स्ट्रिंग के उस हिस्से पर पुनरावृत्ति करें जिसे अभी तक स्वैप नहीं किया गया है
permutations(string_copy, step + 1)
print(permutations('one'))
आउटपुट:
one oen noe neo eno eon None