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}}