Re: There must be a better way!

• To: mathgroup at smc.vnet.net
• Subject: [mg2349] Re: [mg2322] There must be a better way!
• From: gaylord at uiuc.edu (richard j. gaylord)
• Date: Fri, 27 Oct 1995 01:48:28 -0400
• Organization: university of illinois

```>  > From: mathgroup-adm
To: mathgroup at smc.vnet.net
>  > To: mathgroup
>  > Subject: [mg2322] There must be a better way!
>  > Date: Tuesday, October 24, 1995 2:14AM
>  >
>  >
>  > Hi.  I'm trying to write a function that partitions a list into
>  > segments of length given by another length. eg.
>  >         Given l1 = {A,B,C,D,E,F,G,H,I,J}
>  >         and   l2 = {2,3,4,1}
>  > I want to be able to say
>  >         In[1] := MyPartition[l1, l2]
>  > and get
>  >         Out[1] = {{A,B}, {C,D,E}, {F,G,H,I}, {J}}

if you want a function to divy up a list into parts, you can use

split1[lis_, parts_] :=
Module[{dog, cat},
dog[y_, z_] := Take[lis,{y, z}];
cat[x_] := Inner[dog, Drop[x, -1] + 1, Rest[x], List];
cat[FoldList[Plus, 0, parts]] ]

or

split2[lis_, parts_] :=
Module[{pig},
pig[x_] := Take[lis, x + {1, 0}];
Map[pig, Partition[FoldList[Plus, 0, parts], 2, 1]] ]

or much neater looking yet, as a one-liner:

split2[lis_, parts_] :=
Map[Take[lis, # + {1, 0}]&, Partition[FoldList[Plus, 0, parts], 2, 1]]

note: these solutions are given in "Introduction to Programming with
Mathematica"  by Gaylord, Kamin and Wellin (the 2nd edition of this book
was just published).

-richard-

--
"if you're not programming functionally, then you're programming dysfunctionally"

```

• Prev by Date: About Simplify
• Next by Date: Newbie Q: - how do I add search paths correctly...
• Previous by thread: Re: There must be a better way!
• Next by thread: Re: There must be a better way!