किसी दिए गए स्ट्रिंग के सभी संभावित क्रमपरिवर्तनों को खोजने के लिए, आप itertools मॉड्यूल का उपयोग कर सकते हैं जिसमें एक उपयोगी विधि है जिसे क्रमपरिवर्तन (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): # we've gotten to the end, print the permutation print "".join(string) for i in range(step, len(string)): # copy the string (store as array) string_copy = [c for c in string] # swap the current index with the step string_copy[step], string_copy[i] =string_copy[i], string_copy[step] # recurse on the portion of the stringthat has not been swapped yet permutations(string_copy, step + 1) print (permutations ('one'))
आउटपुट
one oen noe neo eno eon None