Some possibilities with their timings:
list = RandomInteger[{0, 10}, 600000];
Cases[list, 0 | 1]; // AbsoluteTiming
{0.065004, Null}
Select[list, # == 0 || # == 1 &]; // AbsoluteTiming
{0.865050, Null}
DeleteCases[list, Except[0 | 1]]; // AbsoluteTiming
{0.242014, Null}
Pick[list, # == 0 || # == 1 & /@ list]; // AbsoluteTiming
{0.922053, Null}
Pick[list, list, 0 | 1]; // AbsoluteTiming
{0.189011, Null}
Replace[list, {0 -> 0, 1 -> 1, _ :> Sequence[]}, {1}]; // AbsoluteTiming
{0.213012, Null}
Replace[list, a_ :> Sequence[] /; Not[a == 0 || a == 1], {1}]; // AbsoluteTiming
{1.652095, Null}
Replace[list, Except[0 | 1] :> Sequence[] , {1}]; // AbsoluteTiming
{0.238014, Null}
Cases
$\endgroup$Append
andAppendTo
are notoriously slow because lists are array-like and have to be copied to increase their size. $\endgroup$ParallelDo
is efficient or save. Comparei = {}; ParallelDo[i = {i, j}, {j, 1, 100}];i
With the result you get for a standardDo
. $\endgroup$