Re: repeating elements in a list
- To: mathgroup at smc.vnet.net
- Subject: [mg54993] Re: repeating elements in a list
- From: Peter Pein <petsie at arcor.de>
- Date: Wed, 9 Mar 2005 06:34:19 -0500 (EST)
- References: <200503050634.BAA00963@smc.vnet.net> <d0juuh$n6f$1@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
János wrote: > On Mar 5, 2005, at 1:34 AM, Torsten Coym wrote: > > >>Hello, >>suppose I have list >>lst={A, B, C} >>and I want to create a new list, where all elements are repeated n >>times >>so that (for n=3): >>newlst={A, A, A, B, B, B, C, C, C} >>I have the following code to do this: >>n=3; >>newlst=Flatten[Table[Table[lst[[i]], {n}], {i, Length[lst]}]]; >>but I'm pretty sure, that there must be a more elegant way to solve the >>problem. >>thank you > > > I was thinking to generalize a less efficient solution like: > > In[197]:= > Flatten[Cases[Tuples[lst, n], > {x1_, x2_, x3_} /; > x1 == x2 == x3]] > Out[197]= > {a, a, a, b, b, b, c, c, c} > > If I construct the pattern {x1_,x2_,x3_ } this way: > In[254]:= > Table[ToExpression[ > StringJoin["x", ToString[ > i], "_"]], {i, 1, n}] > Out[254]= > {x1_, x2_, x3_} > > then it still works and gives: > In[249]:= > Cases[Tuples[lst, n], > Table[ToExpression[ > StringJoin["x", > ToString[i], "_"]], > {i, 1, n}] /; x1 == x2 == > x3] > Out[249]= > {{a, a, a}, {b, b, b}, > {c, c, c}} > > If I construct the condition this way: > In[263]:= > Flatten[Fold[Equal, > First[Table[ToExpression[ > StringJoin["x", > ToString[i]]], > {i, 1, n}]], > Rest[Table[ToExpression[ > StringJoin["x", > ToString[i]]], > {i, 1, n}]]]] > Out[263]= > x1 == x2 == x3 > > and insert into the Case statement, then it does not work. Any good > explanation for it ? What is the right way to build up a condition > programatically ? > > Thanks ahead, > > János > > > > Condition[] (/;) has atrribute HoldAll set. If you really insist on constructing an expression which is logically equivalent to Equal@@x/@Range[n] in this manner, write Evaluate[Flatten[....]]. b.t.w. Why don't you use the property of {x1,x2,..,xn} when constructing the pattern? In[1]:= n=3; lst={a,b,c}; In[3]:= Cases[Tuples[lst,n],Table[x_,{n}]]//Flatten Out[4]= {a,a,a,b,b,b,c,c,c} -- Peter Pein Berlin
- References:
- repeating elements in a list
- From: Torsten Coym <torsten.coym@eas.iis.fraunhofer.de>
- repeating elements in a list