Wolfram mathematica Mathematica中的过滤子列表

Wolfram mathematica Mathematica中的过滤子列表,wolfram-mathematica,rule-engine,Wolfram Mathematica,Rule Engine,我是mathematica的新手。我的问题是: 例如,我有一个嵌套列表: 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 Cases[lst, {(1 | 0) ..}] 但是我怎样才能得到相反的模式呢?像这样: ls

我是mathematica的新手。我的问题是:

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

 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
Cases[lst, {(1 | 0) ..}]
但是我怎样才能得到相反的模式呢?像这样:

 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).  *)
因此,首先创建一个函数来检查子列表中的所有0/1:

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}};
您可以使用以下选项进行筛选:

lst /. x:{(1 | 0) ..} :> x
Cases[lst, {(1 | 0) ..}]
或者通过以下任一方式获得补码:

Cases[lst, Except @ {(1 | 0) ..} ]
或:


谢谢,伙计!根据你的线索,我有另一个解决方案:Case[lst,{(1 | 0)…}]