Wolfram mathematica 在Mathematica中如何组合满足特定条件的列表

Wolfram mathematica 在Mathematica中如何组合满足特定条件的列表,wolfram-mathematica,data-manipulation,Wolfram Mathematica,Data Manipulation,这可能是一个较低层次的问题,但我正在努力寻找一个合适的答案: 假设我有一个列表(或矩阵): 现在我想以这样一种方式组合这些列:具有相同第一个元素的列组合在一起,即 { {{1},{2}}, {{3,4,5},{6,7,8}} } 有没有快速实现这一点的方法?很抱歉,可能会造成混淆! 谢谢 这个怎么样: a = {{{1}, {1}, {1}, {2}, {2}, {2}}, {{3}, {4}, {5}, {6}, {7}, {8}}}; b = GatherBy[Transpos

这可能是一个较低层次的问题,但我正在努力寻找一个合适的答案: 假设我有一个列表(或矩阵):

现在我想以这样一种方式组合这些列:具有相同第一个元素的列组合在一起,即

{
{{1},{2}},
{{3,4,5},{6,7,8}}
}
有没有快速实现这一点的方法?很抱歉,可能会造成混淆! 谢谢

这个怎么样:

a = {{{1}, {1}, {1}, {2}, {2}, {2}},
     {{3}, {4}, {5}, {6}, {7}, {8}}};

b = GatherBy[Transpose@a, First];
c = DeleteDuplicates@First@a;
d = Array[b[[#, All, 2, 1]] &, Length@c];
{c, d}
{{{1},{2},{{3,4,5},{6,7,8}


Chris Degnen已经给出了一个非常好的方法,但我想发表一些评论。它有助于以Mathematica函数最方便操作的格式保存数据,通常是行而不是列。这就是他在回答中使用
转置
的原因

编辑:我想我误解了您的输出所代表的内容。我相应地改写了我的答案

使用GatherBy
,如Chris所做的:

a = {{{1}, {1}, {1}, {2}, {2}, {2}}, {{3}, {4}, {5}, {6}, {7}, {8}}};

{#[[All, 1, 1]], #[[All, All, 2, 1]]} & @ GatherBy[a\[Transpose], First]
或者使用
播种
收获:

Reap[MapThread[Sow[#2, #] &, a], _, {{#}, Join @@ #2} &][[2]]\[Transpose]

这里
MapThread
取代了初始的
Transpose

+1,但我相信您不需要
数组
;你可以使用
d=b[[;;Length@c,全部,2,1]]
{{{1}, {2}}, {{3, 4, 5}, {6, 7, 8}}}
Reap[MapThread[Sow[#2, #] &, a], _, {{#}, Join @@ #2} &][[2]]\[Transpose]
{{{1}, {2}}, {{3, 4, 5}, {6, 7, 8}}}