2013-06-18 27 views
1

预先感谢任何人和任何人都可以提供的帮助。Mathematica,具有常见值的组对

我试图用数学中的GatherBy功能,以采取对列表中的a={{1, 4}, {2, 3}, {1, 5}, {2, 5}, {3, 4}, {6, 8}, {6, 7}, {7, 8}}和排序包含值1,理想的情况是对的,输出看起来像Output={ { {1,4},{1,5} } , {{2, 3}, {2, 5}, {3, 4}, {6, 8}, {6, 7}, {7, 8} } }或类似的东西,其中的第一个元素在输出中是包含1的第一个元素a的列表,第二个元素包含不包含1的所有元素。

干杯!

+1

谢谢你,永毅。我发现这样做会更好,'b = GatherBy [a,MemberQ [#,1]&]'因为我将组合所有包含1的集合,所以它们不会在过程中随后对。对不起,把那部分拿出来。我猜想作为一个必然结果,当我根据值4进行分组时,我使用类似的命令'b = GatherBy [a,MemberQ [#,4]&] 输出:{{{8,8},{ 6,7},{7,8}},{{1,4,5},{2,3,4,5}}} 但我想包含for的列表首先出现。任何建议如何? – filup

回答

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

回答●请在评论,Sort结果,以确保所需的顺序:

a = {{1, 4}, {2, 3}, {1, 5}, {2, 5}, {3, 4}, {6, 8}, {6, 7}, {7, 8}}; 
SortBy[GatherBy[a, MemberQ[#, 2] &], !MemberQ[[email protected]#, 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}}}}