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