Re: Select only certain sublists matching criteria
- To: mathgroup at smc.vnet.net
- Subject: [mg110992] Re: Select only certain sublists matching criteria
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Fri, 16 Jul 2010 05:16:52 -0400 (EDT)
On 7/15/10 at 3:09 AM, chris at chrispoole.com (Chris Poole) wrote: >I have a list like this: {{0, -4, 2.283}, {0.5, -4, 2.282}, {1, -4, >2.280}, {1.5, -4, 2.276}, {2, -4, 2.271}, {2.5, -4, 2.264}, {3, >-4, 2.255}, {3.5, -4, >2.242}} >I want to look at each list of 3 numbers, and keep only the lists >where the third item in each list fits some criteria. >I can do something like this: Select[{2, 15, 1, 16, 17}, Abs[3 - #] >< 3 &] Change # to #[[3]] and the selection criteria will be applied to the 3rd element of each item in the list >But it only works for flat lists. >For example, I want only the lists where the third item is around >2.25 +- 0.001. Something like that. Here are a few ways to do what you want for the data above after setting the tolerance to 0.01. I changed the tolerance since there is nothing within 0.001 of 2.25 in your data In[3]:= Select[data, Abs[#[[3]] - 2.25] < .01 &] Out[3]= {{3, -4, 2.255}, {3.5, -4, 2.242}} In[4]:= Select[data, Abs[Last@# - 2.25] < .01 &] Out[4]= {{3, -4, 2.255}, {3.5, -4, 2.242}} In[5]:= Cases[data, {_, _, _?(Abs[# - 2.25] < .01 &)}] Out[5]= {{3, -4, 2.255}, {3.5, -4, 2.242}} In[7]:= Pick[data, data[[All, 3]], _?(Abs[# - 2.25] < .01 &)] Out[7]= {{3, -4, 2.255}, {3.5, -4, 2.242}} This last approach is most useful when you already have the element of each sublist you want as your selector in a separate list. If this is not the case, then the overhead required to create the second argument to Pick will make this method slower than the others for long lists.