在Mathematica中有条件地选择嵌套列表

时间:2011-09-06 22:01:45

标签: select wolfram-mathematica conditional

考虑:

list= {{{{21, 22}, 283}, {{26, 13}, 28}, {{32, 17}, 531}, {{31, 11}, 
187}, {{30, 9}, 154}, {{25, 12}, 377}, {{12, 16}, 
285}}, {{{20, 19}, 183}, {{11, 23}, 249}, {{18, 21}, 
174}, {{12, 21}, 513}, {{24, 23}, 233}, {{29, 20}, 
465}}, {{{18, 20}, 136}, {{13, 23}, 244}, {{19, 21}, 
228}, {{14, 16}, 453}, {{14, 22}, 201}, {{18, 22}, 
417}, {{10, 22}, 217}, {{17, 23}, 180}}, {{{22, 20}, 
123}, {{25, 17}, 210}, {{28, 10}, 536}, {{27, 13}, 
296}, {{19, 11}, 391}, {{23, 18}, 305}, {{24, 18}, 204}}}


Length /@ list

{7, 6, 8, 7}

问题是:

如何选择长度为>的子列表?例如7。 我一直在尝试很多位置/选择失败: - (

3 个答案:

答案 0 :(得分:7)

Select[list, Length@# > 7 &]  

修改

如果有疑问,您可以测试标准如何评估其参数。例如:

Select[{a, b, c}, Print]

或者在古典道路上多一点:

Reap@Select[{a, b, c}, Sow]

感谢Brett在下面的评论中提出的建议

答案 1 :(得分:4)

使用案例查看所有级别,其模式仅匹配长度大于7的列表。

In[426]:= Cases[list, aa_List /; Length[aa] > 7, Infinity]

Out[426]= {{{{18, 20}, 136}, {{13, 23}, 244}, {{19, 21}, 
   228}, {{14, 16}, 453}, {{14, 22}, 201}, {{18, 22}, 417}, {{10, 22},
    217}, {{17, 23}, 180}}}

---编辑---

对不起,我误会了。如上所述,没有第三个参数(无穷大)。在这种情况下,结果是相同的。

---结束编辑---

Daniel Lichtblau

答案 2 :(得分:1)

其他一些变体:

Cases[list,_?(Length[#]>7&)]

If[Length[#]>7,#]&/@list/.Null->Sequence[]

(x\[Function]Replace[x,x_?(Length[#]<=7&)->Sequence[]])/@list