我正在尝试将子列表组合在下面给出的数据列表中:
Data={{{2, 6, 3, 5}, {4, 2, 5, 1}}, {{2, 6, 3, 5}, {6, 4, 7, 3}},
{{8, 12 ,9 ,11}, {12 ,8 , 13, 7}},
{{10, 13, 11, 14}, {14, 9, 1, 10}};
目标是根据每对是否具有相似的术语来组合子列表,如下所示:
FinalData={{{2,6,5,3},{4,2,5,1},{6,4,7,3}},
{{8, 12 ,9 ,11}, {12 ,8 , 13, 7}},
{{10, 13, 11, 14}, {14, 9, 1, 10}}};
我尝试使用多种方法解决此问题,例如For循环,while循环,Gather,Union和Select,但仍然卡住了。有人愿意帮助我吗?第一篇文章,我希望得到一些建议!提前谢谢。
答案 0 :(得分:1)
这再现了你的例子:
Union[Flatten[#, 1]] & /@ GatherBy[data, First]
请注意,这只是第一个子列表相同的分组,Union
对结果进行排序。如果你需要更一般的,你应该给出一个更一般的例子。
答案 1 :(得分:1)
此
Data //. {{h___,{p_,q_},m___,{p_,r_},t___}->{h,{p,q,r},m,t},
{h___,{p_,q_},m___,{r_,q_},t___}->{h,{p,q,r},m,t}}
搜索您的数据以查找任何列表{p,q}和另一个列表{p,r}并将其转换为{p,q,r}。它还搜索查找任何列表{p,q}和另一个列表{r,q}并将其转换为{p,q,r}。它一遍又一遍地做到这一点,直到没有其他列表匹配。您应该仔细测试,以确保在所有情况下都是正确的。你应该查一下//在文档中也称为ReplaceRepeated,试图了解其工作原理。你也应该查看"三重空白"这是连续三个下划线,并在文档中作为BlankNullSequence来试图理解它是如何工作的。并查看如何将符号放在_或___&#34之前;命名模式"试着理解它是如何工作的。了解所有这些将为您提供编写程序来控制Mathematica的新功能。