Python: shuffle characters in a string to get all possible string combinations

just looking for a script in Python that gets some string and returns all possible strings consisting of all possible character combinations in the original string ...

I found scripts to randomly mix characters in a string, but they return only one randome combination, and what I'm looking for is all possible combinations ...

Say for example:

script.py "abc"
abc
acb
bac
bca
cab
cba

Thank!

+3
source share
2 answers

itertools.permutations

>>> import itertools
>>> import pprint
>>> pprint.pprint(list(itertools.permutations("spam")))
[('s', 'p', 'a', 'm'),
 ('s', 'p', 'm', 'a'),
 ('s', 'a', 'p', 'm'),
 ('s', 'a', 'm', 'p'),
 ('s', 'm', 'p', 'a'),
 ('s', 'm', 'a', 'p'),
 ('p', 's', 'a', 'm'),
 ('p', 's', 'm', 'a'),
 ('p', 'a', 's', 'm'),
 ('p', 'a', 'm', 's'),
 ('p', 'm', 's', 'a'),
 ('p', 'm', 'a', 's'),
 ('a', 's', 'p', 'm'),
 ('a', 's', 'm', 'p'),
 ('a', 'p', 's', 'm'),
 ('a', 'p', 'm', 's'),
 ('a', 'm', 's', 'p'),
 ('a', 'm', 'p', 's'),
 ('m', 's', 'p', 'a'),
 ('m', 's', 'a', 'p'),
 ('m', 'p', 's', 'a'),
 ('m', 'p', 'a', 's'),
 ('m', 'a', 's', 'p'),
 ('m', 'a', 'p', 's')]

( pprintonly there to make the conclusion more accurate.) Or, if you like,

>>> list(map("".join, itertools.permutations("spam")))
['spam', 'spma', 'sapm', 'samp', 'smpa', 'smap', 'psam', 'psma', 'pasm', 'pams', 'pmsa', 'pmas', 'aspm', 'asmp', 'apsm', 'apms', 'amsp', 'amps', 'mspa', 'msap', 'mpsa', 'mpas', 'masp', 'maps']
+10
source

itertools.permutations doing this.

>>> import itertools
>>> for s in itertools.permutations('banana'):
...     print ''.join(s)
... 
banana
banaan
bannaa
bannaa
# many, many more...
+3
source

Source: https://habr.com/ru/post/1780702/


All Articles