Re: list manipulation
- To: mathgroup at smc.vnet.net
- Subject: [mg20610] Re: list manipulation
- From: "Allan Hayes" <hay at haystack.demon.co.uk>
- Date: Thu, 4 Nov 1999 02:13:28 -0500
- References: <7vm3ud$q8r@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
Jim,
Mathematica has convenient tools for doing what you want. Here are two
possibilities
gaps = {{1, 5.5}, {2, 4.3}, {2.7, 3.1}, {3.002, 4.007}, {10.001,
10.007}, {10.101, 11.001}, {11.007, 12.0}};
events = {6.7, 8.9, 2.3, 2.789, 10, 11.002, 10.115, 3.02, 2.75};
DeleteCases[events, n_ /;
IntervalMemberQ[Interval @@ gaps, n]]
{6.7, 8.9, 10, 11.002}
DeleteCases[events, n_ /; Or @@ ((# <= n <= #2) & @@@ gaps)]
{6.7, 8.9, 10, 11.002}
I have not timed them on large lists - there is clearly some reduntant
testing for larger members of events.
I did find two errors in your coding (the error messages, coloring of
unbalanced brackets, and the menu function Edit>Check Balance are helpfull).
These are corrected in the following, but it does not seem to be doing what
you want and I have not looked into it further.
eout = {0};
max = Length[events];
Do[e = IntegerPart[events[[i]]];
ei = events[[i]];
tmp1 = Select[
gaps, #[[1]] >= IntegerPart[e] && #[[2]] <= IntegerPart[e] &];
For[j = 1, j <= Length[tmp1], j++,
If[ei <= tmp1[[j, 2]] && ei = tmp1[[j, 1]], AppendTo[eout, ei]]], {i,
max}];
Delete[eout, 1];
eout
{0}
Allan
---------------------
Allan Hayes
Mathematica Training and Consulting
Leicester UK
www.haystack.demon.co.uk
hay at haystack.demon.co.uk
Voice: +44 (0)116 271 4198
Fax: +44 (0)870 164 0565
jim leddon <jleddon at home.com> wrote in message
news:7vm3ud$q8r at smc.vnet.net...
>
> Hi Folks,
>
> The program below takes the each value of the list,"events" , finds
> which of these values falls within the intervals {x,y} which comprise
> the list, "gaps" , then removes these values from the events list and
> outputs this modified list which is called "eout". I'm getting an error
> for incomplete expression, although I'm not sure if the algorithm itself
> is doing the job. These reason why I wrote the loop to cue on the
> integer parts of both lists is because these lists will eventually be
> quite large, about 3000 elements each in which case I wanted to make the
> process more efficient.
>
> Thanks if anyone can help.
> Debbie L.
>
> gaps = {{1,5.5}, {2,4.3}, {2.7, 3.1}, {3.002, 4.007}, {10.001,
> 10.007}, {10.101, 11.001}, {11.007, 12.0}};
>
> events ={6.7, 8.9, 2.3, 2.789, 10, 11.002, 10.115, 3.02, 2.75};
> eout = {0};
> max = Length[events];
> Do[e = IntegerPart[events[[i]]; ei = events[[i]]; tmp1 =
> Select[gaps,
>
> #[[1]] >= IntegerPart[e] && #[[2]] <= IntegerPart[e] &];
> For[ j=1, j<= Length[tmp1], j++,
> If[ ei <= tmp1[[j,2]] && ei .=
tmp1[[j,1]],
> AppendTo[eout,ei]]
> ],
> {i,max}
> ]
> Delete[eout,1];
> eout
>
>