Frage

Ich bin ein Neuling Benutzer in Mathematica. Hier ist mein Problem:

Zum Beispiel, ich habe eine verschachtelte Liste:

 lst = {{1, 0, 0}, {0, 1, 1}, {2, 0, 1}, {1}, {0,3}}

Ich will nur dann ausgegeben jene sublist dessenderen Elemente 0 oder 1. Die Ausgabe der oben aufgeführte Liste sollte sein:

{{1, 0, 0}, {0, 1, 1}, {1}}

Ich kann die Liste bekommen, dass mit diesem meinen Bedingungen erfüllt:

lst /. x:{(1 | 0) ..} :> x

Aber wie kann ich die Umkehrung des Musters erhalten? wie folgt aus:

 lst /. x:NOT{(1 | 0) ..} :> Sequence[]

So dass ich das Ergebnis in einem Schlag bekommen.

Danke!

War es hilfreich?

Lösung

Dies ist eine nette Anwendung für einige / alle:

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

macht also zuerst eine Funktion, die prüft eine Unterliste für alle Nullen / Einsen:

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

Dann filtern Sie die Liste-of-Listen für die Unterlisten, die den Test bestehen:

Select[lst, chk]

Oder als Einzeiler:

Select[lst, every[#==0||#==1&, #]&]

Andere Tipps

Beginnend mit:

lst = {{1, 0, 0}, {0, 1, 1}, {2, 0, 1}, {1}, {0, 3}};

Sie können mit diesem Filter:

Cases[lst, {(1 | 0) ..}]

Oder bekommt die Ergänzung mit entweder:

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

oder:

DeleteCases[lst, {(1 | 0) ..}]
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top