Re: Challenge!

*To*: mathgroup at christensen.cybernetics.net*Subject*: [mg972] Re: Challenge!*From*: colinr at extro.ucc.su.OZ.AU (Colin Rose)*Date*: Thu, 4 May 1995 05:24:29 -0400

Paul E Howland writes: > I have two lists of equal length M. I wish to generate a third list > also of length M, where the ith element of this list is > either the ith element of the first list, > or the ith element of the second list. (with equal probability) > > eg. I have a list n1 = {a,b,c,d,e,f,g} > and another n2 = {A,B,C,D,E,F,G} > a valid answer would be: {a,B,C,d,e,F,G} > What is the most compact function that could achieve my goal? Well, one solution to your problem is: MapThread[ If[Random[Integer]==1, #1, #2]&, {n1, n2}] ______ This solution also appears to be somewhat faster than the various Table[] alternatives. For instance: In[1]:= n1 = Range[1, 10000]; n2 = Range[10001, 20000]; In[2]:= MapThread[If[Random[Integer]==1, #1, #2]&, {n1, n2}]; // Timing Out[2]= {9.26667 Second, Null} In[3]:= Table[If[Random[Integer]==1, n1[[i]], n2[[i]]], {i, Length[n1]}]; // Timing Out[3]= {12.4 Second, Null} In[4]:= Table[Part[{n1, n2}, 1+Random[Integer], i], {i, Length[n1]}]; // Timing Out[4]= {14.9833 Second, Null} Timings on a Mac Quadra 700. Cheerio Colin Colin Rose tr(I) - Theoretical Research Institute ______________________________________ colinr at extro.ucc.su.oz.au