Re: Transforming a list
- To: mathgroup at smc.vnet.net
- Subject: [mg103154] Re: Transforming a list
- From: Ray Koopman <koopman at sfu.ca>
- Date: Wed, 9 Sep 2009 04:45:15 -0400 (EDT)
- References: <h859pi$ps0$1@smc.vnet.net>
DeleteCases[#,0]& /@ Transpose[PadRight[#,Length@lst[[1]]]&/@lst]
or
Transpose[PadRight[#,Length@lst[[1]]]&/@lst] /. 0->Sequence[]
The second way is a little faster, but watch the spacing:
/.0 parses as /(.0) .
On Sep 8, 2:57 am, Don <don... at comcast.net> wrote:
> 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.