过滤掉子列表中的Mathematica
-
21-09-2019 - |
题
我在数学一个新手用户。这里是我的问题:
例如,我有一个嵌套列表:
lst = {{1, 0, 0}, {0, 1, 1}, {2, 0, 1}, {1}, {0,3}}
我想只输出那些子表,其元素为0或1以上所列内容的输出应该是:
{{1, 0, 0}, {0, 1, 1}, {1}}
我能得到满足我的条件与此列表:
lst /. x:{(1 | 0) ..} :> x
但我怎么能得到的格局相反?像这样:
lst /. x:NOT{(1 | 0) ..} :> Sequence[]
,这样我可以得到在一个冲程的结果。
谢谢!
解决方案
这是对一些漂亮的应用程序/每:
some[f_, l_List] := (* whether f applied to some *)
Scan[If[f[#], Return[True]]&, l] === True (* element of list is True. *)
every[f_, l_List] := (* similarly, And @@ f/@l *)
Scan[If[!f[#], Return[False]]&, l]===Null (* (but with lazy evaluation). *)
因此,首先使该检查所有零/那些子列表的函数:
chk[lst_] := every[#==0||#==1&, lst]
然后筛选列表的-列出了通过测试的子列表:
Select[lst, chk]
或者,作为一个班轮:
Select[lst, every[#==0||#==1&, #]&]
其他提示
与开始:
lst = {{1, 0, 0}, {0, 1, 1}, {2, 0, 1}, {1}, {0, 3}};
可以用此过滤器:
Cases[lst, {(1 | 0) ..}]
或者与获得的补充或者:
Cases[lst, Except @ {(1 | 0) ..} ]
或:
DeleteCases[lst, {(1 | 0) ..}]
不隶属于 StackOverflow