MathGroup Archive 2003

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

Search the Archive

Re: split a list

  • To: mathgroup at smc.vnet.net
  • Subject: [mg40537] Re: split a list
  • From: Jens-Peer Kuska <kuska at informatik.uni-leipzig.de>
  • Date: Wed, 9 Apr 2003 20:26:16 -0400 (EDT)
  • Organization: Universitaet Leipzig
  • References: <b70boj$883$1@smc.vnet.net>
  • Reply-to: kuska at informatik.uni-leipzig.de
  • Sender: owner-wri-mathgroup at wolfram.com

Hi,

lst = Table[Random[], {10000}];

(* your version *)

SplitAt[r_, m_] := Module[{tmp, u, v, i},
    u = v = {};
For[i = 1, i <= Length[r], i++, tmp = r[[i]];
      If[tmp > m, AppendTo[u, tmp], AppendTo[v, tmp]];];
    {v, u}
    ]

(* a faster one *)

SplitAt1[r_, m_] := {Select[r, # < m &], Select[r, # >= m &]}


Timing[SplitAt[lst, 0.5];]

{24.22 Second, Null}

and

Timing[SplitAt1[lst, 0.5];]

{0.6 Second, Null}

Regards
  Jens

Roberto Brambilla wrote:
> 
> Hi,
> 
> I have a list (very long, thousands, and unsorted) of numbers r={n1,n2...}
> and for a given a number m  I want to split it in the two sublists
> (unsorted, same order) u={elements<m], v={elements>m}.
> Now I use this *old-style*  method:
> 
> u = v = {};
> For[i = 1, i <= Length[r], i++,
>   tmp = r[[i]];
>   If[tmp > m , AppendTo[u, tmp], AppendTo[v, tmp]];
>   ]
> 
> Any suggestion for a more efficient (and elegant) method?
> Also oneliners are well accepted.
> 
> Many thanks, Roberto
> 
> Roberto Brambilla
> CESI
> Via Rubattino 54
> 20134 Milano
> tel +39.02.2125.5875
> fax +39.02.2125.5492
> rlbrambilla at cesi.it


  • Prev by Date: Alternative to ListContourPlot3D
  • Next by Date: Re: Why not expected result for Inverse[] ?
  • Previous by thread: Re: split a list
  • Next by thread: Re: Re: split a list