Services & Resources / Wolfram Forums
-----
 /
MathGroup Archive
1996
*January
*February
*March
*April
*May
*June
*July
*August
*September
*October
*November
*December
*Archive Index
*Ask about this page
*Print this page
*Give us feedback
*Sign up for the Wolfram Insider

MathGroup Archive 1996

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

Search the Archive

Re: select a range of elements from a nested list

  • To: mathgroup at smc.vnet.net
  • Subject: [mg5427] Re: select a range of elements from a nested list
  • From: haberndt at dnai.com (Harald Berndt)
  • Date: Sat, 7 Dec 1996 00:25:59 -0500
  • Organization: DNAI ( Direct Network Access )
  • Sender: owner-wri-mathgroup at wolfram.com

In article <57ush1$3cb at dragonfly.wolfram.com>, Oliver Schurr
<schurro at gusun.acc.georgetown.edu> wrote:

> Hi MathGroup
> 
> Say you have a nested list like that {{x1,y1},{x2,y2},{x3,y3},...{xn,yn}}
> basically containing X and Y values for a XY plot in each element. The X
> values span a range from say 0 to 0.4 and you ONLY want to select the
> elements (x,y values) from the list for which the x value spans say 0 to
> 0.3. BUT you don't want to COUNT the elements (visually on the screen) and
> figure out the position at which the x value is just greater than 0.3 and
> then subtract 1 from this position.
> 
> I still want do define the list by using
> 
> Table[list[[x,1]],list[[x,2]],{x, 1, ZZZ}]
> 
> here ZZZ means the number for which the x value <= 0.3, this number needs
> to be found by MATHEMATICA!
> 
> I like to know if there is a general procedure to select elements from a
> nested list based on the values of one member of the elements of that
> nested list.

There is, and it's quite simple. A quick look into the documentation turns
up the function Select[], which even sounds like the right thing to try.
So, let's say you have a list

In[14]:=
t1

Out[14]=
{{0.,0.00498942},{0.02,0.00637976},{0.04,0.00853591},{0.06,0.00774966},{0.08,
    0.0146887},{0.1,0.0159799},{0.12,0.010505},{0.14,0.0218018},{0.16,
    0.0158617},{0.18,0.0377771},{0.2,0.036134},{0.22,0.0565887},{0.24,
    0.0579106},{0.26,0.0711923},{0.28,0.0787898},{0.3,0.0801005},{0.32,
    0.0984567},{0.34,0.123357},{0.36,0.137414},{0.38,0.139577},{0.4,0.152203}}

Simply select all pairs whose first part has the right properties:

In[15]:=
Select[t1, First[#]<=0.3&]

Out[15]=
{{0.,0.00498942},{0.02,0.00637976},{0.04,0.00853591},{0.06,0.00774966},{0.08,
    0.0146887},{0.1,0.0159799},{0.12,0.010505},{0.14,0.0218018},{0.16,
    0.0158617},{0.18,0.0377771},{0.2,0.036134},{0.22,0.0565887},{0.24,
    0.0579106},{0.26,0.0711923},{0.28,0.0787898},{0.3,0.0801005}}

It doesn't even matter whether the list is ordered or not. It's reaonably
fast, too ...
> 
> I hope I made myself clear enough to you all.
> 

Well, and I hope I got it.

Best,

-- 
Harald Berndt, Ph.D.                            Research Specialist,
Voice: 510-652-5974                                      Consultant
FAX:   510-215-4299


  • Prev by Date: Re: Q:Nicer than: Function[x,MapAt[Im,x,2]]/@data
  • Next by Date: FindRoot question
  • Previous by thread: Re: select a range of elements from a nested list
  • Next by thread: Re: select a range of elements from a nested list