【问题标题】:Mathematica, group pairs with common valuesMathematica,具有共同值的组对
【发布时间】:2019-03-07 02:12:10
【问题描述】:

我正在尝试使用 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} } } 或其他东西类似的,输出中的第一个元素是 a 中包含 1 的所有元素的列表,第二个元素包含所有不包含 1 的对。

【问题讨论】:

  • 谢谢你,永义。我发现这更好用,b = GatherBy[a, MemberQ[#, 1] &],因为我将组合所有包含 1 的集合,因此它们在此过程中不会简单地成对。很抱歉把那部分漏掉了。我想作为推论,当我开始根据值 4 进行分组时,我使用了类似的命令b = GatherBy[a, MemberQ[#, 4] &] Output:{{{6, 8}, {6, 7}, {7, 8}}, {{1, 4, 5}, {2, 3, 4, 5}}},但我希望包含 for 的列表集首先出现。有什么建议吗?

标签: sorting wolfram-mathematica


【解决方案1】:
GatherBy[a, #[[1]] == 1 || #[[2]] == 1 &]

【讨论】:

    【解决方案2】:

    回答评论中的 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}}}}
    

    【讨论】:

      猜你喜欢
      • 2019-04-24
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      • 2020-10-27
      • 1970-01-01
      • 2016-10-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多