Re: A question about pattern-matching
- To: mathgroup at smc.vnet.net
- Subject: [mg63753] Re: [mg63728] A question about pattern-matching
- From: "Igor C. Antonio" <igora at wolf-ram.com>
- Date: Fri, 13 Jan 2006 04:48:40 -0500 (EST)
- References: <djcgcs$6du$1@smc.vnet.net> <200510230946.FAA10826@smc.vnet.net> <200601120822.DAA10486@smc.vnet.net>
- Reply-to: igora at wolf-ram.com
- Sender: owner-wri-mathgroup at wolfram.com
gardyloo wrote: > Hi, all. > > I am trying to extract certain parts of a dataset, while retaining > some of the overall structure. I decided to do it using pattern-matching > and replacements, but have run into some problems. > > First, a small subset of the data: > > testList = {{-90, {{60493, 0.061}, {62493, 0.15881}, {64493.5, > > 0.559}}}, {-88, {{62493, 0.151}, {64493., 0.61617}, {65993.4, > > 0.171}, {68993.10, 0.06}}}, {-86, {{62493.75, 0.14}, {64493.55, > > 0.61440}, {65993., 0.18}, {67993, 0.0}, {68993.100, 0.06448}}}}; > > > The data consists of lists of the form { integer, { ordered pair1, > ordered pair2, ... } }, and my goal is to extract the second number in > each of the ordered pairs, while retaining the lists' overall structure. > So, for example, from testList, I'd want something like > { { 0.061, 0.15881, 0.559}, {0.151, 0.61617, 0.171, 0.06}, {0.14, > 0.61440, 0.18, 0.0, 0.06448}} > returned. This does what you want: In[2]:= testList /.{z_?NumberQ, x_}:> (Part[#,2]&/@x) Out[2]= {{0.061,0.15881,0.559},{0.151,0.61617,0.171,0.06},{0.14,0.6144,0.18,0., 0.06448}} (Notice the RuleDelayed) > > I've tried several patterns, with variously named bits, and only some of > them make sense to me (and none of them, yet, return what I really > want). Can someone explain them to me? > > I'd expect this one to return the list of lists of ordered pairs. It > returns the full testList: > > testList /. {{(z_)?NumberQ, x:{{_Real, _Real}...}} -> x} > Returning the original input means that no pattern matched. > I thought that one was free to "type" the parts of the pattern to > return. I also thought that naming the parts rather freely was allowed. > The first three of the following return what I would expect, but the > last one, in naming the first of the ordered pairs' elements, returns > the testList apparently unchanged: > > > testList /. {{z_, {x:{a_, _}...}} -> x} > Again, it simply didn't match any patterns you provided, so returns the original input. With the pattern above, you're saying that you want every first element of the ordered pair to be the same (within the scope of each element of testList). You're saying your input is like this: {-90, {a1, <something>}, {a1, <something}}, {a1, <something>}, etc...} Example: In[5]:= testList = {{-90, {{111, 0.061}, {111, 0.15881}, {111, 0.559}}}, {-88, {{111, 0.151}, {112, 0.61617}, {113, 0.171}, {114, 0.06}}}}; In[6]:= testList /. {{z_, {x:{a_, _}...}} -> x} Out[6]= {{111, 0.061}, {111, 0.15881}, {111, 0.559}, {-88, {{111, 0.151}, {112, 0.61617}, {113, 0.171}, {114, 0.06}}}} Notice that the second element of testList didn't match because the first element of each ordered pair is different. -- Igor C. Antonio Wolfram Research, Inc. http://www.wolfram.com To email me personally, remove the dash.
- References:
- A question about pattern-matching
- From: gardyloo <gardyloo@mail.wsu.edu>
- A question about pattern-matching