There are three main ways of deleting members in such cases :
- As Daniel said , you could try
DeleteCases
supplementing a pattern which picks up just the numbers which are element of another list. The pattern is like this :
as what Daniel said :
a_ /; MemberQ[{2,4,56},a]
or :
a_?(MemberQ[{2, 4, 56}, #] &)
Now you could use each one of the above patterns in DeleteCases
. Thus we have :
DeleteCases[{1, 2, 4, 70, 11, 20, 56, 79} , a_ /; MemberQ[{2,4,56},a])]
or :
DeleteCases[{1, 2, 4, 70, 11, 20, 56, 79} , a_?(MemberQ[{2, 4, 56}, #] &)]
- But there is even a simpler way of deleting cases which could be tried.
This is a sample :
{1, 2, 4, 70, 11, 20, 56, 79} /. a_ /; MemberQ[{2, 4, 56}, a] -> Nothing
In this way we could just convert any instance matching your pattern to Nothing
! ( Converting THING to NOTHING. isn't better?! )
- And even simpler :
Just using Complement
:
Complement[{1, 2, 4, 70, 11, 20, 56, 79}, {2, 4, 56}]
BE CAUTIONED !! Using each one of the mentioned ways WILL NOT take the same (asymptotically) time to evaluate.
Just for representation , we could compare these two ways in list with length of 10^6 :
For the first route :
AbsoluteTiming[
Table[DeleteCases[Range[10^6],
a_?(MemberQ[RandomInteger[10^6, 100], #] &)];, 5]] // First
which gives me 124.474
(means 124 seconds).
And for the second way:
AbsoluteTiming[
Table[Range[10^6] /.
a_ /; MemberQ[RandomInteger[10^6, 100], a] -> Nothing;,
5]] // First
Which gives me 124.8
(means 124 seconds).
While the third way :
AbsoluteTiming[
Table[Complement[Range[10^6], RandomInteger[10^6, 100]];,
5]] // First
just take 0.15
(means 0.15 seconds) !!
Compare those : 124 sec, 124 sec , 0.15 sec
So the best way is the third way especially for larger List
s ! :)
DeleteCases[{1, 2, 4, 70, 11, 20, 56, 79}, Alternatives@@{2,4,56}]
should do the trick. $\endgroup$