Foros Python
Eliminar combinaciones repetidas - Versión para impresión

+- Foros Python (https://foro.recursospython.com)
+-- Foro: Desarrollo (https://foro.recursospython.com/forumdisplay.php?fid=1)
+--- Foro: General (https://foro.recursospython.com/forumdisplay.php?fid=9)
+--- Tema: Eliminar combinaciones repetidas (/showthread.php?tid=27)



Eliminar combinaciones repetidas - derian8040 - 07-03-2017

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)



RE: Eliminar combinaciones repetidas - Francisco - 07-03-2017

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.