Fast way to select those elements from a list that are in another

*To*: mathgroup at smc.vnet.net*Subject*: [mg86740] Fast way to select those elements from a list that are in another*From*: Andrew Moylan <andrew.j.moylan at gmail.com>*Date*: Thu, 20 Mar 2008 02:51:41 -0500 (EST)

Two lists of integers: {a, b} = Table[RandomInteger[10000, 1000], {2}]; Which elements from a are in b? Select[a, MemberQ[b, #] &]; // Timing >> {0.351, Null} It takes about 0.351 seconds (on my slow laptop). Specialised functions for related tasks, such as Intersection[a, b], are much faster: Intersection[a, b]; // Timing >> {0., Null} Using Intersection, here's a somewhat faster way to select those elements from a that are in b: With[ {c = Intersection[a, b]}, Select[a, MemberQ[c, #] &] ]; // Timing >> {0.09, Null} Is there a better, faster way to do this?