2010-12-16 13 views
3

Pythonで文字列を受け取ったスクリプトを探して、元の文字列の文字の可能な組み合わせをすべて返します。Python:可能なすべての文字列の組み合わせを得るために文字列内の文字をシャッフル

例えば、

言って...私はランダム文字列内の文字をシャッフルするスクリプトを見つけたが、彼らは唯一のrandomeの組み合わせを返し、私が探しているすべての可能な組み合わせである。

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

ありがとうございます!

+1

'python permutation'。 – khachik

答えて

10

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

>>> 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'] 
+0

ありがとう!ちょうど私が探していたもの! –

3

itertools.permutationsはそれを行い、必要に応じて、(pprintは、出力ルックすっきりを作ることだけがあります)か。

>>> import itertools 
>>> for s in itertools.permutations('banana'): 
...  print ''.join(s) 
... 
banana 
banaan 
bannaa 
bannaa 
# many, many more... 
関連する問題