MathGroup Archive 1997

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Partition List

  • To: mathgroup at smc.vnet.net
  • Subject: [mg8430] Re: Partition List
  • From: tburton at cts.com (Tom Burton)
  • Date: Sat, 30 Aug 1997 00:42:39 -0400
  • Organization: Brahea Consulting
  • Sender: owner-wri-mathgroup at wolfram.com

On 26 Aug 1997 04:27:39 -0400, in comp.soft-sys.math.mathematica you
wrote:

>A question on programing.
>I want to partition a list, using special values in the list as boundary
>indicators. For example, myList=3D{3,7,10,6,1,1,6,1,7,10,3,4,6} and my =
special
>value for boundary is 10, then my desired result would be
>result=3D{{3,7},{10,6,1,1,6,1,7},{10,3,4,6}}.
>
>How to do this using structure manipulating operators, and how to do it =
with
>pattern matching? Thanks.
>
Here's clumsy, slow method using pattern matching:
{myList//.{a__,10,b___}:>Sequence[{a},{10,b}]}

Run-time appears to be quadratic in the length of the list. I considered
tried to speed it up using nested lists and level-specific matching, but
then I timed my first attempt at structured programming:

Take[myList,#/.{{a_},{b_}}:>{a,b-1}]&/@
  Partition[Join[{{1}},
            Position[myList,10],
            {{Length[myList]+1}}],
        2,1]

This latter method is sooo much faster that I abandoned the first
approach. The latter method takes about 20 seconds on a list of one
million random integers (test case Table[Random[Integer,20],{1000000}]).
Run-time appears to be linear in the length of the list.  Cool.

PS: Not surprisingly, Extract seems to perform about as well as Take;
just leave in the second level of braces.
Tom Burton


  • Prev by Date: Re: Re: How to select unique elements in a list?
  • Next by Date: Re: Bra-Ket
  • Previous by thread: Re: Partition List
  • Next by thread: Re: Partition List