Re: Sum elements in a list with conditions
- To: mathgroup at smc.vnet.net
- Subject: [mg69842] Re: Sum elements in a list with conditions
- From: dimmechan at yahoo.com
- Date: Mon, 25 Sep 2006 03:53:02 -0400 (EDT)
- References: <ef5066$mm5$1@smc.vnet.net>
Your desired output can be achieved with proper
pattern matching.
lst = {{a1, b1}, {a2, b2}, {a2, b3}, {a2, b4}, {a3, b5}, {a3, b6}};
lst //. {a___, {x_, y_}, {x_, z_}, b___} -> {a, {x, y + z}, b}
{{a1, b1}, {a2, b2 + b3 + b4}, {a3, b5 + b6}}
Information["___"]
___ (three _ characters) or BlankNullSequence[ ] is a pattern object
that can stand for any sequence of zero or more Mathematica
expressions.
___h or BlankNullSequence[h] can stand for any sequence of expressions,
all of which have head h.
Attributes[BlankNullSequence] = {Protected}
Information["//."]
expr //. rules repeatedly performs replacements until expr no longer
changes.
Attributes[ReplaceRepeated] = {Protected}
Options[ReplaceRepeated] = {MaxIterations -> 65536}
For example
myrule = {a___, {x_, y_}, {x_, z_}, b___} -> {a, {x, y + z}, b};
dat=Table[Random[Integer,{1,5}],{30},{2}]
{{4,3},{4,5},{4,2},{5,4},{4,2},{5,2},{2,4},{5,1},{1,3},{4,4},{3,1},{3,5},
{5,4},{3,1},{3,4},{2,5},{2,5},{3,5},{4,4},{2,4},{4,3},{4,5},{5,3},{5,4},
{5,1},{1,4},{5,2},{1,3},{3,1},{4,1}}
dat//.myrule
{{4,10},{5,4},{4,2},{5,2},{2,4},{5,1},{1,3},{4,4},{3,6},{5,4},{3,5},{2,10},
{3,5},{4,4},{2,4},{4,8},{5,8},{1,4},{5,2},{1,3},{3,1},{4,1}}
Regards
Dimitris