permutacion del bit

Arnau Sanchez pyarnau en gmail.com
Lun Mar 23 19:15:06 CET 2009


heimy wrote:

>  def combinaciones(elementos, n):
>      if n < 1:
>          yield ''
>      else:
>          for e in elementos:
>              for comb in combinaciones(elementos, n - 1):
>                  yield e + comb
> 
> o, para cualquier secuencia...
> 
>  def combinaciones(elementos, n):
>      t = type(elementos)
>      if n < 1:
>          yield t()
>      else:
>          for e in elementos:
>              for comb in combinaciones(elementos, n - 1):
>                  yield t(e) + comb

Sólo puntualizar que -a mi entender- lo que pedía el OP (y lo que efectivamente
hace esta función) no son combinaciones, sino variaciones con repetición. En
esta tabla se ven bastante bien todas las posibilidades:

http://personal5.iddeo.es/ztt/Tem/F4_Combinatoria.htm

Por otra parte, dado que las variaciones con repetición se pueden ver como el
producto cartesiano del conjunto de entrada consigo mismo (tantas veces como
elementos tenga), y que a partir de la versión 2.6 tenemos disponible
itertools.product...

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

...podríamos simplemente escribir:

itertools.product(["0", "1"], repeat=2)

Sirva además para complementar la propuesta de Ricardo, ya que lo que se muestra
en la documentación es una implementación no-recursiva.

arnau

-- 
Desarrollador freelance
http://www.arnau-sanchez.com
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





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