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?