¿Cuál es la forma más rápida de obtener todas las combinaciones de pares en una matriz en python?

Por ejemplo, si la matriz es [1,2,3,4] quiero que la salida sea [1,2], [1,3], [1,4], [2,3], [2,4 ] y [3,4].

Me gustaría una solución que sea mejor que el método de fuerza bruta de usar dos para bucles. ¿Cómo implemento esto?

Related of "¿Cuál es la forma más rápida de obtener todas las combinaciones de pares en una matriz en python?"

Aunque la respuesta anterior le proporcionará todos los ordenamientos por pares, el resultado esperado del ejemplo parece implicar que desea todos los pares desordenados .

Esto se puede hacer con itertools.combinations :

 >>> import itertools >>> x = [1,2,3,4] >>> list(itertools.combinations(x, 2)) [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)] 

Compare con el otro resultado:

 >>> list(itertools.permutations(x, 2)) [(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3)] 
 import itertools x = [1,2,3,4] for each in itertools.permutations(x,2): print(each) 

Tenga en cuenta que itertools es un objeto generador, lo que significa que debe recorrerlo para obtener todo lo que desea. El ‘2’ es opcional, pero le dice a la función cuál es el número por combinación que desea.

Puede leer más aquí

Editado:

Como dijo ForceBru en el comentario, puede desempaquetar el generador para imprimir, omitiendo el bucle for juntos. Pero todavía lo iteraría, ya que es posible que no sepa qué tan grande será el objeto generado:

 print(*itertools.permutations(x, 2))