我在数学一个新手用户。这里是我的问题:

例如,我有一个嵌套列表:

 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) ..}]
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top