Le Jeudi 22 Juin 2006 10:07, Girish Sahani a écrit :
> Hi guys,
> I want to generate all permutations of a string. I've managed to
> generate all cyclic permutations. Please help :)
>
Here is mine, maybe more versatile :
def permute(iterable) :
if len(iterable) == 1 : yield iterable
else :
next = permute(iterable[1:])
for i in next :
if isinstance(iterable[0], basestring) :
elt = iterable.__class__(iterable[0])
else : elt = iterable.__class__((iterable[0],))
for j, k in enumerate(i) : yield i[0:j] + elt + i[j:]
yield i + elt
In [2]: list(permute((1, 2, 3)))
Out[2]: [(1, 2, 3), (2, 1, 3), (2, 3, 1), (1, 3, 2), (3, 1, 2), (3, 2, 1)]
In [3]: list(permute('abc'))
Out[3]: ['abc', 'bac', 'bca', 'acb', 'cab', 'cba']
In [4]: list(permute('aba'))
Out[4]: ['aba', 'baa', 'baa', 'aab', 'aab', 'aba']
In [5]: set(permute('aba'))
Out[5]: set(['aba', 'aab', 'baa'])
In [6]: list(permute([1, 3, 3]))
Out[6]: [[1, 3, 3], [3, 1, 3], [3, 3, 1], [1, 3, 3], [3, 1, 3], [3, 3, 1]]
In [7]: set(permute([1, 3, 3])) # warning
---------------------------------------------------------------------------
exceptions.TypeError Traceback (most recent
call last)
/home/maric/<ipython console>
TypeError: list objects are unhashable
In [8]: set(permute((1, 3, 3)))
Out[8]: set([(3, 3, 1), (3, 1, 3), (1, 3, 3)])
regards,
--
_____________
Maric Michaud
_____________
Aristote - www.aristote.info
3 place des tapis
69004 Lyon
Tel: +33 426 880 097
--
http://mail.python.org/mailman/listinfo/python-list