একটি দেওয়া স্ট্রিং-এর সকল সম্ভাব্য পারমুটেশন বের করতে itertools মডিউল ব্যবহার করা যায়, যাতে permutations(iterable[, r]) নামের একটি উপকারী মেথড রয়েছে। এই মেথডটি ইটেরেবল-এর উপাদানগুলো থেকে-successive 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]
# করেন্ট ইনডেক্সকে step-সহ সওয়্যাপ করুন
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