3
$\begingroup$

If I have a list of lists with different lengths:

{{1, 2, 3}, {1}, {1, 2, 3, 4}, {x}, {1, x}, {2}, {2, 3}}

How can I extract all the sub-lists with no symbols:

{{1, 2, 3}, {1}, {1, 2, 3, 4}, {2}, {2, 3}}

There must be an easy way to do this but I can't find it. Unfortunately, I'm not so good with Mathematica to be able to modify similar cases that I found(for example Link1 and Link2) to the problem at hand.

$\endgroup$
6
$\begingroup$
Cases[{{1, 2, 3}, {1}, {1, 2, 3, 4}, {x}, {1, x}, {2}, {2, 3}}, {__?NumericQ}]
$\endgroup$
  • 4
    $\begingroup$ Or 3 underscores if empty lists should also be kept. $\endgroup$ – Martin Ender Mar 17 '16 at 21:42
  • $\begingroup$ Perfect! Thank you. $\endgroup$ – MathX Mar 17 '16 at 21:44
  • $\begingroup$ Or DeleteCases[ {{1, 2, 3}, {1}, {1, 2, 3, 4}, {x}, {1, x}, {2}, {2, 3}}, {___, _Symbol, ___}] $\endgroup$ – xyz Mar 18 '16 at 1:58
5
$\begingroup$

Another approach is to use VectorQ:

lis = {{1, 2, 3}, {1}, {1, 2, 3, 4}, {x}, {1, x}, {2}, {2, 3}};
Select[lis, VectorQ[#, NumericQ] &]

(* {{1, 2, 3}, {1}, {1, 2, 3, 4}, {2}, {2, 3}} *)

Variations:

Select[lis, AllTrue[#, NumericQ] &]
$\endgroup$
4
$\begingroup$

I think @march's answer is probably the best way. Here's another for giggles...

Select[{{1, 2, 3}, {1}, {1, 2, 3, 4}, {x}, {1, x}, {2}, {2, 3}}, ! MemberQ[#, _Symbol] &]
$\endgroup$
  • $\begingroup$ Interesting. What is the name of that _Symbol part? I want to search for other properties that have the same usage. $\endgroup$ – MathX Mar 17 '16 at 23:24
  • 2
    $\begingroup$ @BehzadNazari That's shortcut for Blank[Symbol] which is a pattern match for a certain Head. Head[x] (if x isn't defined) evaluates to Symbol. Try Head /@ {x, 1.0, 1, "test"} for examples. $\endgroup$ – kale Mar 18 '16 at 2:10

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.