Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Eliminar combinaciones repetidas
#1
Buenos días, tengo un algoritmo sencillo, que genera números de 012 a 978, la idea es que si creo la combinación 0,1,2, ya no repita la combinación de las otras formas como 1,0,2 o 2,1,0 o 2,0,1.

Código:
for i in range (10):
   for j in range (10):
       for k in range (10):
           if i != j and j != k and k!=i:
               print(i,j,k)
Responder
#2
Hola, bienvenido. Siempre que pienses en "todas las combinaciones posibles" de algo, recuerda la función itertools.permutations, pues es justamente lo que hace. Por ejemplo, para obtener todas las combinaciones posibles de los números 1, 2 y 3:

  1. >>> import itertools
  2. >>> list(itertools.permutations("123"))
  3. [('1', '2', '3'), ('1', '3', '2'), ('2', '1', '3'), ('2', '3', '1'), ('3', '1','2'), ('3', '2', '1')]


Entonces ahora puedes aplicarlo a tu código:

  1. from itertools import permutations
  2.  
  3. combinations = []
  4.  
  5. for i in range (10):
  6.     for j in range (10):
  7.         for k in range (10):
  8.             if i != j and j != k and k!=i:
  9.                 item = "{}{}{}".format(i, j, k)
  10.                 append = True
  11.                 for combination in permutations(item):
  12.                     if "".join(combination) in combinations:
  13.                         append = False
  14.                         break
  15.                 if append:
  16.                     combinations.append(item)
  17.                     print(i, j, k)


Un saludo.
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)