RE: Replacing Numbers in a List
- To: mathgroup at smc.vnet.net
- Subject: [mg68276] RE: [mg68230] Replacing Numbers in a List
- From: "David Annetts" <davidannetts at aapt.net.au>
- Date: Mon, 31 Jul 2006 03:45:43 -0400 (EDT)
- Sender: owner-wri-mathgroup at wolfram.com
Hi Gregory, > Hello everyone, > I have a long list of integers called x, and I want to > replace those that are members of list y with the number 222. > > I did it this way with a Do loop. > > y = {122, 211, 212, 221, 223, 232, 322}; Do[x = > ReplacePart[x,222, Position[x, y[[i]]]],{i, Length@y} ] > > Is this OK, or is there a more direct way? It's OK if it works .... Or if it's quicker .... Or both .... Perhaps another method might be to avoid the Do[] loop. For some test data x = Random[Integer, {0, 20}] & /@ Range[128]; y = Random[Integer, {0, 20}] & /@ Range[16]; Code that avoids a loop might be Timing[ rpl = Partition[Flatten[Position[x, #] & /@ y], 1]; za = ReplacePart[x, 222, rpl]; ] Whereas you have Timing[ Do[ x = ReplacePart[x, 222, Position[x, y[[i]]]], {i, Length@y} ] ] You can compare the two lists using SameQ[za, x] On my machine (3 GHz running XP), loops appear quicker when x has fewer than 2^15 elements. Regards, Dave.