Re: list manipulation
- To: mathgroup at smc.vnet.net
- Subject: [mg100159] Re: [mg100122] list manipulation
- From: Bob Hanlon <hanlonr at cox.net>
- Date: Tue, 26 May 2009 05:12:50 -0400 (EDT)
- Reply-to: hanlonr at cox.net
data = {
{element11, element12, element1N, target11, target12, element1N3,
element1N4},
{element21, element22, element2N, target21, target22, element2N3,
element2N4}
};
data //. {
{s___, target11, target12, e___} :> {s, f[target11, target12], e},
{s___, target21, target22, e___} :> {s, f[target21, target22], e}
}
{{element11, element12, element1N, f[target11, target12], element1N3,
element1N4},
{element21, element22, element2N, f[target21, target22],
element2N3, element2N4}}
data //. (
{s___, Sequence @@ #, e___} :> {s, f @@ #, e} & /@
{{target11,
target12}, {target21, target22}}
)
{{element11, element12, element1N, f[target11, target12], element1N3,
element1N4},
{element21, element22, element2N, f[target21, target22],
element2N3, element2N4}}
% == %%
True
Bob Hanlon
---- "Scot T. Martin" <smartin at seas.harvard.edu> wrote:
=============
I'm wondering if anyone has bright ideas on the puzzle below. I'm trying
to take a very large list of the following form:
{{.., .., a, b, ..},{.., .., c, d, ..},..}
into the form
{{.., .., f[a, b], ..},{.., .., f[c, d], ..},..}
It seems to me that there must be some clever and beautiful way to do this
that I haven't thought of. My code is below with two clumsy solutions.
Suggestions on how to do better?
My code:
In[1]:= (*shown here as minimal to define problem but actual list has \
large N and many entries*)
data = {{element11, element12, element1N, target11, target12,
element1N3, element1N4}, {element21, element22, element2N,
target21, target22, element2N3, element2N4}};
In[2]:= (* first clumsy approach *)
Replace[data, list : _List :> {Sequence @@ list[[1 ;; 3]],
Sequence[f[list[[4 ;; 5]]]], Sequence @@ list[[6 ;;]]}, {1}]
Out[2]= {{element11, element12, element1N, f[{target11, target12}],
element1N3, element1N4}, {element21, element22, element2N,
f[{target21, target22}], element2N3, element2N4}}
In[3]:= (* second clumsy approach *)
data /. {a : Repeated[_, {3}], b : Repeated[_, {2}],
c : __} -> {a, f[b], c}
Out[3]= {{element11, element12, element1N, f[target11, target12],
element1N3, element1N4}, {element21, element22, element2N,
f[target21, target22], element2N3, element2N4}}