MapIndexed is a very handy built-in function. Suppose that I have the following list, called list:
list = {10, 20, 30, 40};
I can use MapIndexed to map an arbitrary function f across list:
{f[10, {1}], f[20, {2}], f[30, {3}], f[40, {4}]}
where the second argument to f is the part specification of each element of the list.
But, now, what if I would like to use MapIndexed only at certain elements? Suppose, for example, that I want to apply MapIndexed to only the second and third elements of list, obtaining the following:
{10, f[20, {2}], f[30, {3}], 40}
Unfortunately, there is no built-in "MapAtIndexed", as far as I can tell. What is a simple way to accomplish this? Thanks for your time.
Answer
If does the job and is simple enough:
MapIndexed[If[2 ≤ First@#2 ≤ 3, f[#, #2], #] &, list]
(* {10, f[20, {2}], f[30, {3}], 40} *)
Comments
Post a Comment