Wolfram mathematica mathematica中的一个特殊计数函数
我想知道如何编写一个特殊的计数函数,它将下列列表{code>{{{1,0}、{2,1,3}、{1,1}、{0,1,1}、{2,1,2}、{3,2}、{1,0}、{2,1}、{2,1}视为:Wolfram mathematica mathematica中的一个特殊计数函数,wolfram-mathematica,Wolfram Mathematica,我想知道如何编写一个特殊的计数函数,它将下列列表{code>{{{1,0}、{2,1,3}、{1,1}、{0,1,1}、{2,1,2}、{3,2}、{1,0}、{2,1}、{2,1}视为: 只要尺寸匹配,它就是等效的。例如,{{1,0}、{2,1,3}和{1,1}、{0,1,1}是等价的,但与{1,0}、{2,1}不是等价的 订购也不重要。例如,{{1,0}、{2,1,3}和{2,1,2}、{3,2}是等价的 级别1列表的元素可以艺术地嵌套。如何编写这样的函数 非常感谢。(1)用0替换所有整数。
{{1,0}、{2,1,3}
和{1,1}、{0,1,1}
是等价的,但与{1,0}、{2,1}
不是等价的{{1,0}、{2,1,3}
和{2,1,2}、{3,2}
是等价的1
列表的元素可以艺术地嵌套。如何编写这样的函数
非常感谢。(1)用0替换所有整数。
(2) 一级排序。
这为列表中的每个类提供了唯一的代表
ll2 = Map[Sort, ll /. aa_Integer -> 0]
Out[9]={{{0,0},{0,0,0},{{0,0},{0,0,0},{{0,0},{0,0,0,0,
0},{0,0},{0,0}
Tally[ll2]
Out[10]={{{{0,0},{0,0,0},3},{{{0,0},{0,0},1}
丹尼尔·利奇布劳
Wolfram Research与@Daniel的答案非常相似,但每个类别保留一名成员:
In[9]:= Tally[list, (Sort[Length /@ #] == Sort[Length /@ #2]) &]
Out[9]= {{{{1, 0}, {2, 1, 3}}, 3}, {{{1, 0}, {2, 1}}, 1}}
使用
给出了与相同的东西,或者
这就给了我们。或者,我个人的最爱
SelectEquivalents[list, Dimensions, #&, {#1, Length@#2}&]
给
{{{2},3}, {{2,2}, 1}}
但是,这暴露了使用维度时的一个缺陷,即当子列表的DIM不同时,它不知道报告什么,因此如果我们将维度替换为Sort@Map[Length,#,{1,Infinity}]&
,我们可以开始处理任意维度。这给
{{{2, 3}, 3}, {{2, 2}, 1}}
因此,每个子列表的维度被揭示。这并没有排序低于第一维度,我不知道如何能立即修复它
{{{2},3}, {{2,2}, 1}}
{{{2, 3}, 3}, {{2, 2}, 1}}