Mathematicaでサブリストをフィルタリング
-
21-09-2019 - |
質問
私は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
しかし、私は、パターンの逆を取得できますか?このような:
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