A ordem da lista
Sep 08 2020
Alguém sabe como obter 'lista2' de 'lista1'? ... ... porque fiquei confuso. O algoritmo será usado para listas muito grandes.
list1 = {{1, 35, 3}, {1, 896, 1}, {2, 3, 999}, {1, 212, 5}, {1, 243, 1}, {3, 2, 88}, {1, 903, 3}, {35, 1, 9}, {1, 914, 1}, {1, 925, 2}, {896, 1, -6}};
list2={{{1, 35, 3}, {35, 1, 9}}, {{1, 896, 1}, {896, 1, -6}}, {{2, 3, 999}, {3, 2, 88}}, {1, 212,5}, {1, 243, 1}, {1, 903, 3}, {1, 914, 1}, {1, 925, 2}};
Claro, a ordem não importa. O mais importante é que os elementos # 1 [[1]] == # 2 [[2]] || # 1 [[2]] == # 2 [[1]] estão em uma sublista.
Respostas
5 kglr Sep 08 2020 at 19:57
Gather[list1, #[[;;2]] == Reverse @ #2[[;;2]] &] /. {x_} :> x
{{{1, 35, 3}, {35, 1, 9}}, {{1, 896, 1}, {896, 1, -6}}, {{2, 3, 999}, {3, 2, 88}}, {1, 212, 5}, {1, 243, 1}, {1, 903, 3}, {1, 914, 1}, {1, 925, 2}}
Se a lista de entrada for uma lista de triplos, você também pode usar Most[#]no lugar de #[[;; 2]] &.
Também podemos construir um gráfico sobre como list1usá-lo RelationGraphe encontrá ConnectedComponents-lo para obter os mesmos agrupamentos:
relation = #[[;; 2]] == Reverse @ #2[[;; 2]] &;
ConnectedComponents @ RelationGraph[relation, list1] /. {x_} :> x
{{{2, 3, 999}, {3, 2, 88}}, {{1, 896, 1}, {896, 1, -6}}, {{1, 35, 3}, {35, 1, 9}}, {1, 925, 2}, {1, 914, 1}, {1, 903, 3}, {1, 243, 1}, {1, 212, 5}}
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
Christopher Nolan uma vez se arrependeu de ter lido o 'roteiro de Pulp Fiction' de Quentin Tarantino