Re: list/sequence problem: a 'keep' list to a list of
- To: mathgroup at smc.vnet.net
- Subject: [mg97186] 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:47 -0500 (EST)
- References: <200903060926.EAA22779@smc.vnet.net>
- Reply-to: drmajorbob at bigfoot.com
Sorry, that fails (with "dummy" as second argument to FoldList) if the first element of keepPrior is True. You haven't specified what you want to do in that case, but maybe this would do: keepPrior = {True, False, True, False, True, False, False, True, True, True, False, True}; counter = 0; Rest@FoldList[(counter++; If[#2, Append[#1, counter], {counter}]) &, {}, keepPrior] {{1}, {2}, {2, 3}, {4}, {4, 5}, {6}, {7}, {7, 8}, {7, 8, 9}, {7, 8, 9, 10}, {11}, {11, 12}} Bobby On Fri, 06 Mar 2009 14:04:10 -0600, DrMajorBob <btreat1 at austin.rr.com> wrote: > 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