NFeruch - FreePalestine
NFeruch - FreePalestine

Reputation: 1145

Alternate way to find all lexicographic orderings of a string in Python

Problem: Find all the different ways to arrange a string E.G. 123 can be arranged--123, 132, 213, 231, 321, 312

So I honestly have no idea how to go about engineering the solution to this problem, as I have not done any official Data Structures and Algorithms courses, but I came up with a more mathematical solution that I was able to turn into code:

if __name__ == '__main__':
    string = 'ABCD'
    count = 0
    for first in string:
        if first is not string[0]:
            print()
        for second in string:
            if second is first:
                continue
            for third in string:
                if third in [second, first]:
                    continue
                for fourth in string:
                    if fourth in [third, second, first]:
                        continue
                    count += 1
                    print(str(first)+str(second)+str(third)+str(fourth), end=', ')
    print('\n{} possible combinations'.format(count))

but I have to manually add or remove for-loops depending on the size of the string. What methodology should I use to go about this problem

Upvotes: 1

Views: 86

Answers (2)

Amir Golpayegani
Amir Golpayegani

Reputation: 11

there is actually a very simple solution, only by using the itertools library;

from itertools import permutations
answer = [''.join(perm) for perm in permutations(s)]

That gives you a list of all the different permutations of s, e.g.

s = 'abc'

Then the answer would be:

answer = ['abc', 'acb', 'bac', 'bca', 'cab', 'cba']

Upvotes: 1

polwel
polwel

Reputation: 647

You want to find all the permutations of the string. Python's standard library includes a function for this.

>>> from itertools import permutations
>>> list(permutations('123'))
[('1', '2', '3'), ('1', '3', '2'), ('2', '1', '3'), ('2', '3', '1'), ('3', '1', '2'), ('3', '2', '1')]

Upvotes: 1

Related Questions