我正在尝试使用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的对。
答案 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}}}}