简体   繁体   中英

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

Problem: Find all the different ways to arrange a string EG 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

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')]

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, eg

s = 'abc'

Then the answer would be:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM