Re: list/sequence problem: a 'keep' list to a list of
- To: mathgroup at smc.vnet.net
- Subject: [mg97185] Re: [mg97147] list/sequence problem: a 'keep' list to a list of
- From: DrMajorBob <btreat1 at austin.rr.com>
- Date: Sat, 7 Mar 2009 02:40:35 -0500 (EST)
- References: <200903060926.EAA22779@smc.vnet.net>
- Reply-to: drmajorbob at bigfoot.com
keepPrior = {False, True, False, True, False, False, True, True, True,
False, True};
counter = 0;
Rest@FoldList[(counter++; If[#2, Flatten@{#1, counter}, {counter}]) &,
dummy, keepPrior]
{{1}, {1, 2}, {3}, {3, 4}, {5}, {6}, {6, 7}, {6, 7, 8}, {6, 7, 8,
9}, {10}, {10, 11}}
or
counter = 0;
Rest@FoldList[(counter++; If[#2, Append[#1, counter], {counter}]) &,
dummy, keepPrior]
{{1}, {1, 2}, {3}, {3, 4}, {5}, {6}, {6, 7}, {6, 7, 8}, {6, 7, 8,
9}, {10}, {10, 11}}
Bobby
On Fri, 06 Mar 2009 03:26:41 -0600, mkr <MilesKRains at gmail.com> wrote:
> I have a list of Booleans, indicating whether prior values in sequence
> are to be 'kept'. I want to generate a list of accumulated 'kept'
> positions for each position in the sequence. The following code
> works, but I would love to see a cleaner, more obivous approach.
> Anyone?
>
> In[]=
>
> keepPrior=
> {False,True,False,True,False,False,True,True,True,False,True};
>
> keptPriors=Function[aclist,If[Split[aclist][[-1,1]]==True,Range[Length
> [aclist]-Length[Split[aclist][[-1]]],Length[aclist]],{Length
> [aclist]}]]/@Rest[FoldList[Append,{},keepPrior]];
>
> TableForm[Transpose[{keepPrior,ToString/@keptPriors}],TableHeadings->
> {Automatic,None}]
>
>
> Out[]=
>
> 1 False {1}
> 2 True {1, 2}
> 3 False {3}
> 4 True {3, 4}
> 5 False {5}
> 6 False {6}
> 7 True {6, 7}
> 8 True {6, 7, 8}
> 9 True {6, 7, 8, 9}
> 10 False {10}
> 11 True {10, 11}
>
>
--
DrMajorBob at bigfoot.com
- References:
- list/sequence problem: a 'keep' list to a list of 'kept' lists
- From: mkr <MilesKRains@gmail.com>
- list/sequence problem: a 'keep' list to a list of 'kept' lists