problem with permutations
James Mills
prologic at shortcircuit.net.au
Sun Sep 7 17:40:34 EDT 2008
Hi,
Here's a (better?) function:
def permutate(seq):
if not seq:
return [seq]
else:
temp = []
for k in range(len(seq)):
part = seq[:k] + seq[k+1:]
for m in permutate(part):
temp.append(seq[k:k+1] + m)
return temp
cheers
James
On Mon, Sep 8, 2008 at 6:47 AM, cnb <circularfunc at yahoo.se> wrote:
> I am trying to translate this elegant Erlang-code for finding all the
> permutations of a list.
> I think it is the same function as is but it doesn't work in Python.
> -- is upd in Python. It works as it should.
>
> perms([]) -> [[]];
> perms(L) -> [[H|T] || H <- L, T <- perms(L--[H])].
>
> def perms(lista):
> if lista == []:
> return [[]]
> else:
> for h in lista:
> return [([h]+[t]) for t in perms(upd(lista, h))]
>
> def upd(lista, elem, acc=tuple([])):
> lista = tuple(lista)
> if lista == ():
> return list(acc)
> if lista[0] == elem:
> return list(acc + tuple(lista[1:]))
> else:
> return upd(lista[1:], elem, acc + tuple([lista[0]]))
> --
> http://mail.python.org/mailman/listinfo/python-list
>
--
--
-- "Problems are solved by method"
More information about the Python-list
mailing list