[Python-es] Sobre permutaciones y productos

Arnau Sanchez pyarnau en gmail.com
Mie Mayo 26 00:03:08 CEST 2010


Repasando el archivo encontré este correo del lunes; no debe haberse reenviado a 
los correos personales (al menos a mi no me llegó) por problemas en la cabecera, 
viene sin remitente y sin asunto:

http://mail.python.org/pipermail/python-es/2010-May/024367.html

> def all_perms(str):
> if len(str) <=1:
> yield str
> else:
> for perm in all_perms(str[1:]):
> for i in range(len(perm)+1):
> yield perm[:i] + str[0:1] + perm[i:]
>
>
>>>> for p in all_perms(['a','b','c']):
> print p
>
> ['a', 'b', 'c']
> ['b', 'a', 'c']
> ['b', 'c', 'a']
> ['a', 'c', 'b']
> ['c', 'a', 'b']
> ['c', 'b', 'a']
>
> ahora si quiero es permutar bits(0,1)
>
>>>> for p in all_perms(['0','1']):
> ... 	print p
> ...
> ['0', '1']
> ['1', '0']
>
> pero no deberia ser
> ['0', '1']
> ['1', '0']
> ['0', '0']
> ['1', '1']

Si el autor ve esto, que diga algo (si puede ser, con una cabecera From ;-)).

De momento la respuesta corta: la permutación está bien, lo que quieres es el 
producto cartesiano:

http://docs.python.org/library/itertools.html



Más información sobre la lista de distribución Python-es