my function:
Pick[l, And @@@ # & /@ Map[Abs[#] <= 3 &, l, {3}]]
Now since it has been a while since I used mathematica i decided to seize the opportunity and run some benchmarks so that I could refresh my memory while doing something fun. please if you have any advice or if you notice any error feel free to point them out.
For simplicity i have generated a 2 2-level list composed by 1000000 nested lists with variable lenght and different range of elements:
list = RandomInteger[{1, 5}, #] & /@ RandomInteger[{1, 5}, 1000000];
list2 = RandomInteger[{1, 5}, #] & /@ RandomInteger[{1, 500}, 1000000];
then, starting from the solutions you guys provided, I defined some functions and each one of them has been given the name of the authors. I had to slightly modify them in order to make them work with my sample list, I hope I didn't make a mess.
i will run the benchmark again if necessary.
jmfun[a_List] := Select[VectorQ[#, IntegerQ[#] && Between[#, {1, 3}] &] &]@a;
carlfun[b_List] := b /. a : {__Integer} /; Min[a] < 1 || Max[a] > 3 -> Nothing;
sjoerdfun[c_List] := Select[ContainsOnly[Range[1, 3]]]@c;
sjoerdfun2[c_List] := Select[AllTrue[Between[{1, 3}]]]@c;
jmxsjoerdfun[a_List] := Select[AllTrue[Through@*(IntegerQ && Between[{1,3}])]]@a;
wizarfun[a_List] := Cases[{(1 | 2 | 3) ..}]@a;
alxfun[c_List] := Pick[c, Map[ContainsOnly[#, Range[3]] &, c, {1}]];
jmxalxfun[c_List] := Pick[c, Map[Complement[#, {1, 2, 3}] === {} &, c]];
kglrfun[c_List] := Select[##, FreeQ[0]] &@Clip[c, {1, 3}, {0, 0}];
subafun[c_List] := DeleteCases[c, {___, _?(! Between[#, {1, 3}] &), ___}, {1}];
alucardfun[d_List] := Pick[d, And @@@ Map[ Abs[# ] <= 3 &, d, {2}]];
you may notice i didn't add wuyudi's answer to the benchmark, the reason is that I don't understand anymore how it works and hence I could not define a working function with it.
the code i used for the benchmark:
authors = { jmfun, carlfun, sjoerdfun , sjoerdfun2 , jmxsjoerdfun,
wizarfun, alxfun, jmxalxfun, kglrfun, subafun, alucardfun};
results = {AbsoluteTiming[#[list]][[1]], #} & /@ authors // Sort;
results2 = {AbsoluteTiming[#[list2]][[1]], #} & /@ authors // Sort;
in the end the results were plotted on 2 different barchart plots.
the first one has a linear scale:
Rasterize[
Labeled[Framed[
BarChart[results[[;; , 1]], ChartStyle -> "DarkRainbow",
AxesLabel -> Automatic, ChartLegends -> results[[;; , 2]],
ChartLabels ->
Placed[results[[;; , 2]], Above, Rotate[#, 67 Degree] &],
LabelStyle -> Directive[Blue, Thick, Italic],
ScalingFunctions -> "Log"]], " test 1: Linear plot", Top,
LabelStyle ->
Directive[Bold, FontFamily -> "Helvetica", FontSize -> 18]]]

the second one with a logarithmic scale:
Rasterize[
Labeled[Framed[
BarChart[results2[[;; , 1]], ChartStyle -> "DarkRainbow",
AxesLabel -> Automatic, ChartLegends -> results[[;; , 2]],
ChartLabels ->
Placed[results[[;; , 2]], Above, Rotate[#, 67 Degree] &],
LabelStyle -> Directive[Blue, Thick, Italic],
ScalingFunctions -> "Log"]], " test 2: Log plot", Top,
LabelStyle ->
Directive[Bold, FontFamily -> "Helvetica", FontSize -> 18]]]
which gives :
