MathGroup Archive 2009

[Date Index] [Thread Index] [Author Index]

Search the Archive

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.
>
>


  • Prev by Date: Re: Bug with Integrate in v7?
  • Next by Date: Re: Transforming a list
  • Previous by thread: Re: Transforming a list
  • Next by thread: Re: Transforming a list