Re: Partition a list into sublists of unequal size
- To: mathgroup at smc.vnet.net
- Subject: [mg83962] Re: Partition a list into sublists of unequal size
- From: Valeri Astanoff <astanoff at gmail.com>
- Date: Wed, 5 Dec 2007 07:19:42 -0500 (EST)
- References: <fj37cv$hq0$1@smc.vnet.net>
On 4 d=E9c, 10:41, antf <anthony... at gmail.com> wrote:
> Hello,
>
> I have a list that looks like the following:
>
> list={1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,0}
>
> I then find the positions of the 1s in the list:
>
> positions = Flatten@Position[list,1]
>
> {1,4,7,8,10,15}
>
> I then want to partition a third list into sublists so that the first
> sublist is from index 1;;1, the second sublist is from index 2;;4, the
> third sublist is from index 5;;7, the fourth sublist is just element
> 8, etc.
>
> Currently, I use Partition on the positions sublist with overlap as
> in:
>
> Partition[Join[{1},positions],2,1]
>
> {{1,1},{1,4},{4,7},{7,8},{8,10},{10,15}}
>
> I then use this list to partition the target list by Mapping Take to
> each element of this list and adjusting the first index appropriately.
>
> I am sure there must be a simpler way to do this. Can anyone tell me
> how to do this operation?
>
> Thanks,
> Anthony
Good day,
A solution with Split:
list={1,0,0,1,0,0,1,1,0,1,0,0,0,0,1,0};
list2={5,7,9,11,13,15,17,19,21,23,25,27,29,31,33,35};
#[[All,2]]& /@ Split[Transpose[{list,list2}],
#1[[1]]==0 && (#2[[1]]==0 || #2[[1]]==1)&]
{{5},{7,9,11},{13,15,17},{19},{21,23},{25,27,29,31,33},{35}}
V.Astanoff