Re: Apply a function to parts of a list
- To: mathgroup at smc.vnet.net
- Subject: [mg110306] Re: Apply a function to parts of a list
- From: Bill Rowe <readnews at sbcglobal.net>
- Date: Sun, 13 Jun 2010 04:08:13 -0400 (EDT)
On 6/12/10 at 5:32 AM, rui.rojo at gmail.com (Rui) wrote: >I have always done very ugly code when trying to do something >seemingly simple and basic such as applying a function to subparts >of a list. Simple example, I want to divide by 2 all the second >elements of a list >{{a, 5}, {b, 6}, ...} --> {{a, 5/2}, ...} >My ideas: Transpose -> MapAt/Map -> Transpose Build the sublist with >Part and then rebuild it Use Map and a function like #[[All, 2]] and >then rebuild it. >I don't like any solution. I wanted to know if there's anything >simple that I'm overseing Perhaps pattern matching, i.e., In[17]:= {{a, 5}, {b, 6}} /. {x_, y_Integer} -> {x, y/2} Out[17]= {{a, 5/2}, {b, 3}} But note In[18]:= {{a, 5}, {b, 6}} /. {x_, y_} -> {x, y/2} Out[18]= {{a, 5}, {b/2, 3}} This last happens since the pattern {x_,y_} matches {{a,5},{b,6}} which is why I restricted the match in the second position to integers. But if the list were longer, i.e., In[19]:= {{a, 5}, {b, 6}, {c, 7}} /. {x_, y_} -> {x, y/2} Out[19]= {{a, 5/2}, {b, 3}, {c, 7/2}} there is no problem with the simpler pattern