Mathematica,具有共同价值观的群体

时间:2013-06-18 18:01:56

标签: sorting wolfram-mathematica

我正在尝试使用Mathematica中的GatherBy函数来获取列表a={{1, 4}, {2, 3}, {1, 5}, {2, 5}, {3, 4}, {6, 8}, {6, 7}, {7, 8}}中的对,并按包含值1的对进行排序。理想情况下,输出看起来像{ {1}}或类似的东西,其中输出中的第一个元素是Output={ { {1,4},{1,5} } , {{2, 3}, {2, 5}, {3, 4}, {6, 8}, {6, 7}, {7, 8} } }中包含1的所有元素的列表,第二个元素包含所有不包含1的对。

2 个答案:

答案 0 :(得分:1)

GatherBy[a, #[[1]] == 1 || #[[2]] == 1 &]

答案 1 :(得分:0)

回答评论中的q,Sort结果以确保所需的顺序:

a = {{1, 4}, {2, 3}, {1, 5}, {2, 5}, {3, 4}, {6, 8}, {6, 7}, {7, 8}};
SortBy[GatherBy[a, MemberQ[#, 2] &], !MemberQ[First@#, 2] &]

另一种方法:

Reap[Sow[ # , MemberQ[#, 2]  ] & /@ a, {True, False}] // Last

收益率:

{{{{2, 3}, {2, 5}}}, {{{1, 4}, {1, 5}, {3, 4}, {6, 8}, {6, 7}, {7, 
8}}}}