permutacion del bit

heimy ricardo.cardenes en gmail.com
Lun Mar 23 15:28:20 CET 2009


Oops... Mandé una versión corregida de uno que lanzaba una excepción
cuando n < 1. Devolviendo cadena vacía en ese caso quedaría más
compacto:

 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

2009/3/23 heimy <ricardo.cardenes en gmail.com>:

> Si quiere algo más genérico, al estilo del primer ejemplo:
>
>  def combinaciones(elementos, n):
>      if n < 1:
>          yield ''
>      elif n == 1:
>          for e in elementos:
>              yield e
>      else:
>          for e in elementos:
>              for comb in combinaciones(elementos, n - 1):
>                  yield e + comb
>
>>>> [x for x in combinaciones('01', 1)]
> ['0', '1']
>>>> [x for x in combinaciones('01', 2)]
> ['00', '01', '10', '11']
>>>> [x for x in combinaciones('01', 3)]
> ['000', '001', '010', '011', '100', '101', '110', '111']
>
_______________________________________________
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