a = {{1.1, 2.2}, {1.1, 2.2}, {x, b}, {c, d}, {x, b}, {1, 2}} # /. (Rule[First@#, Append @@ #] & /@ Tally[#]) &[a] (* {{1.1, 2.2, 2}, {1.1, 2.2, 2}, {x, b, 2}, {c, d, 1}, {x, b, 2}, {1, 2,1}} *) For huge lists: # /. Dispatch[Rule[First@#, Append @@ #] & /@ Tally[#]] &[a]; Will speed things up nicely. Also quite fast on large lists: Partition[Flatten[Riffle[#, Join @@ ConstantArray @@@ Tally[#][[All, {2, 2}]]]], 3] &@a Unlike the above (where order of elements does not matter), this takes advantage of the OP assumptions of same elements appearing in sequence.