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
- Follow-Ups:
- Re: Re: split a list
- From: Dr Bob <majort@cox-internet.com>
- Re: Re: split a list