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