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