Foros Python

Versión completa: Eliminar combinaciones repetidas
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
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)
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.