Question

Je suis un utilisateur débutant dans Mathematica. Voici mon problème:

Par exemple, j'ai une liste imbriquée:

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

Je veux que la sortie les sous-liste dont les éléments sont 0 ou 1. La sortie de la liste ci-dessus doit être:

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

Je peux obtenir la liste qui satisfait mes conditions avec ceci:

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

Mais comment puis-je obtenir l'inverse du modèle? comme ceci:

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

Alors que je peux obtenir le résultat d'un seul coup.

merci!

Était-ce utile?

La solution

Ceci est une application agréable pour certains / tous:

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

Alors d'abord une fonction qui vérifie une sous-liste pour tous les zéros / les:

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

Puis filtrer votre liste-de-listes pour les sous-listes qui passent le test:

Select[lst, chk]

Ou, comme une seule ligne:

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

Autres conseils

A partir de:

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

Vous pouvez filtrer avec ceci:

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

Ou procurez-vous le complément soit:

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

ou

DeleteCases[lst, {(1 | 0) ..}]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top