How to generate all permutations of a string?

James Stroud jstroud at ucla.edu
Fri Jun 23 00:56:38 EDT 2006


Girish Sahani wrote:
>>>thanks lawrence...however this func doesnt return the permuted strings,
>>>so
>>>i added some code as follows to generate a list of all the permutations:
>>>
>>>def permute(seq):
>>>    l = []
>>>    if len(seq) == 0:
>>>        yield []
>>>    else:
>>>        for i in range(0,len(seq)):
>>>            for rest in permute(seq[:i] + seq[i+1:]):
>>>                yield (seq[i],) + rest
>>>    for t in permute(seq):
>>>        l.append(''.join(t))
>>>    return l
>>>
>>>This gives me a syntax error!
>>>I need to output a list that has all the permutations of the input
>>>string.
>>>
>>>
>>>
>>>
>>>
>>>>--
>>>>http://mail.python.org/mailman/listinfo/python-list
>>>>
>>>
>>>
>>p = ["".join(s) for s in permute('abcdefg')]
> 
> 
> This fails to work too. I'm trying to call permute func from another func,
> python gives me a TypeError as follows:
> 
> def permute(seq):
>     l = []
>     if len(seq) == 0:
>         yield []
>     else:
>         for i in range(0,len(seq)):
>             for rest in permute(seq[:i] + seq[i+1:]):
>                 yield (seq[i],) + rest
> 
> def main(stringList):
>     for string in stringList:
>         permList = list(permute(string))
>         l = ["".join(s) for s in permList]
> 
> 
>>>>l = ['abc','abd','bcd']
>>>>main(l)
> 
> TypeError: can only concatenate tuple (not "list") to tuple
> 

I think I should have provided a context for my example. It was to be 
used with Lawrence D'Olivero's code and not yours.

James

 >>> def permute(Seq) :
...     """generator which yields successive permutations of the elements
...     of Seq."""
...     if len(Seq) == 0 :
...         yield ()
...     else :
...         for i in range(0, len(Seq)) :
...             for rest in permute(Seq[:i] + Seq[i + 1:]) :
...                 yield (Seq[i],) + rest
...
 >>> def main(stringList):
...     for string in stringList:
...         l = ["".join(s) for s in permute(string)]
...         print l
...
 >>> l
['abc', 'abd', 'bcd']
 >>> main(l)
['abc', 'acb', 'bac', 'bca', 'cab', 'cba']
['abd', 'adb', 'bad', 'bda', 'dab', 'dba']
['bcd', 'bdc', 'cbd', 'cdb', 'dbc', 'dcb']




More information about the Python-list mailing list