Wolfram mathematica 删除Mathematica中大小为零的子列表

Wolfram mathematica 删除Mathematica中大小为零的子列表,wolfram-mathematica,Wolfram Mathematica,假设您有一个列表,并且只希望删除长度为零的列表,类似于: a={{...},{...},{...},...} DeleteCases[a, ?] ?应该是什么?可能是: a = {{1, 2, 3}, {4, 5}, {}, {5}} b = DeleteCases[a, x_ /; Length[x] == 0] {{1, 2, 3}, {4, 5}, {5}} 以下是纳赛尔提供的解决方案: In[2]:= DeleteCases[a, x_/;Length[x]==0] Out[2]

假设您有一个列表,并且只希望删除长度为零的列表,类似于:

a={{...},{...},{...},...}
DeleteCases[a, ?]
应该是什么?

可能是:

a = {{1, 2, 3}, {4, 5}, {}, {5}}
b = DeleteCases[a, x_ /; Length[x] == 0]


{{1, 2, 3}, {4, 5}, {5}}
以下是纳赛尔提供的解决方案:

In[2]:= DeleteCases[a, x_/;Length[x]==0]
Out[2]= {{1,2,3},{4,{5,5.5},{}},f[7],{8}}
请注意,它将删除级别1上长度为零的所有对象。如果只想从第一级删除长度为零的列表(即
{}
),则可以使用

In[3]:= DeleteCases[a, {}]
Out[3]= {{1,2,3},{4,{5,5.5},{}},6,f,f[7],{8}}
或者,如果要从所有级别删除它们,请使用
ReplaceAll
/。


谢谢!(我很少使用mathematica…@Nasser执行
DeleteCases[a,{}]
会更有效率。例如,
a=Range/@RandomInteger[{0,5},10^6]然后您的变体将在1.2秒内运行,而
DeleteCases[a,{}]
只需0.15秒。谢谢,很高兴知道这一点。Mathematica有点复杂,因为做同一件事总是有很多方法。找到做某事的正确方法可能已经够难了,找到正确的、也是最有效的方法可能更难。但在Mathematica中,找出一个人可以用多少种方法做同样的事情总是很有趣的。关于第一级的非列表项,这是一个很好的观点。我没有想到这一点,因为所示的示例在第一级有所有列表。但很高兴你指出了这一点。谢谢@Nasser。这可能不是利比里亚问题中的一个问题,但我认为值得一提。只要小心
Sequence[]
,@belisarius,这难道不比被一分为二更好吗?(如果对
序列[]有一个严重的警告的话,
我没有领会你的意思。)@先生,那当然是个笑话。大家都知道,
Sequence[]
只不过是一只手拍手的声音。这个问题以前在这里用了一个更一般的表述:
In[3]:= DeleteCases[a, {}]
Out[3]= {{1,2,3},{4,{5,5.5},{}},6,f,f[7],{8}}
In[4]:= a /. {} -> Sequence[]
Out[4]= {{1,2,3},{4,{5,5.5}},6,f,f[7],{8}}