Re: Transforming a list
- To: mathgroup at smc.vnet.net
- Subject: [mg103166] Re: [mg103108] Transforming a list
- From: Adriano Pascoletti <adriano.pascoletti at dimi.uniud.it>
- Date: Wed, 9 Sep 2009 04:47:32 -0400 (EDT)
- References: <200909080958.FAA26578@smc.vnet.net>
A solution with Sow and Reap: this associates each element with its position in the sublist Map[Sequence @@ Transpose[{#, Range@Length@#}] &, {{c, e, g}, {d, f}, {e, g}, {f}, {g}, {}}] and this gives what you want In[2]:= Reap[Apply[Sow, (Sequence @@ Transpose[{#1, Range[Length[#1]]}] & ) /@ {{c, e, g}, {d, f}, {e, g}, {f}, {g}, {}}, {1}], _][[2]] Out[2]= {{c, d, e, f, g}, {e, f, g}, {g}} Adriano Pascoletti 2009/9/8 Don <donabc at comcast.net> > I am given: lst = {{c, e, g}, {d, f}, {e, g}, {f}, {g}, {}} > > I want to form a list of sublists where the first sublist consists of the > first elements > from each sublist of lst, the second sublist the second elements from each > of the sublists of lst etc. > > The final outcome should be: > {{c, d, e, f, g}, {e, f, g}, {g}} > > I can do this by first padding the sublists of lst (to make them the same > length)and then using Transpose. But how to get rid of the trailings 0's? > > For example: > > newLst = Map[PadRight[#, Length[lst[[1]]]] &, lst] > > Transpose[newLst] > > which produces: > > {{c, d, e, f, g, 0}, {e, f, g, 0, 0, 0}, {g, 0, 0, 0, 0, 0}} > > Is there a better way to end up with > > {{c, d, e, f, g}, {e, f, g}, {g}} > > Thank you. > >
- References:
- Transforming a list
- From: Don <donabc@comcast.net>
- Transforming a list