4

私は 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[]

一発で結果が出せるように。

ありがとう!

4

2 に答える 2

6

で始まります:

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) ..}]
于 2011-03-29T20:03:07.540 に答える
5

これは、いくつか/すべてのための素晴らしいアプリケーションです:

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).  *)

したがって、最初にすべてのゼロ/1のサブリストをチェックする関数を作成します:

chk[lst_] := every[#==0||#==1&, lst]

次に、テストに合格したサブリストのリストのリストをフィルタリングします。

Select[lst, chk]

または、ワンライナーとして:

Select[lst, every[#==0||#==1&, #]&]
于 2009-09-03T13:02:34.790 に答える