Re: A question about pattern-matching
- To: mathgroup at smc.vnet.net
- Subject: [mg63743] Re: [mg63728] A question about pattern-matching
- From: Sseziwa Mukasa <mukasa at jeol.com>
- Date: Fri, 13 Jan 2006 04:48:20 -0500 (EST)
- References: <djcgcs$6du$1@smc.vnet.net> <200510230946.FAA10826@smc.vnet.net> <200601120822.DAA10486@smc.vnet.net>
- Sender: owner-wri-mathgroup at wolfram.com
On Jan 12, 2006, at 3:22 AM, 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. > > 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} That's because a lot of your pairs are not of the form {_Real,_Real} such as {60493, 0.061} which is an {_Integer,_Real}. > On the other hand, this one returns only the lists of ordered pairs: > > testList /. {{(z_)?NumberQ, x:{{_, _}...}} -> x} As expected since the ordered pairs are of the form {_,_} which matches. > I thought that one was free to "type" the parts of the pattern to > return. You are, but you have to be sure of what the type you want to match is, for example: N[testlist]/.{{(z_)?NumberQ, x:{{_Real, _Real}...}} -> x} results in the lists of pairs. > I also thought that naming the parts rather freely was allowed. > ...the > last one, in naming the first of the ordered pairs' elements, returns > the testList apparently unchanged: > > In[54]:= > > [deleted] > testList /. {{z_, {x:{a_, _}...}} -> x} > > Although a solution would help me a lot, I really would like to > know > what I'm missing in applying these replacement rules. The last rule is a rather confusing construct. by using a_ to name the pattern matching the first element of the list and ... means you expect the first element of the list of pairs to be the same for all pairs. You can see this clearly using MatchQ: In[16]:= MatchQ[{{1,2},{1,3},{1,4}},{{a_,_}...}] MatchQ[{{1,2},{1,3},{2,4}},{{a_,_}...}] Out[16]= True Out[17]= False Hope this helps. Regards, Ssezi
- References:
- A question about pattern-matching
- From: gardyloo <gardyloo@mail.wsu.edu>
- A question about pattern-matching