有几种自然的方法可以做到这一点。您可以使用
Partition来形成“百分比减少”函数的参数列表:
In[3]:= list = {a, b, c, d, e};
In[4]:= Partition[list, 2, 1]
Out[4]= {{a, b}, {b, c}, {c, d}, {d, e}}
然后你可以应用一个函数到这些内容上:
In[6]:= f @@@ Partition[list, 2, 1]
Out[6]= {f[a, b], f[b, c], f[c, d], f[d, e]}
使用您的百分比减少函数:
In[7]:= PercentDecrease[a_, b_] := (b - a)/a
In[8]:= PercentDecrease @@@ Partition[list, 2, 1]
Out[8]= {(-a + b)/a, (-b + c)/b, (-c + d)/c, (-d + e)/d}
阅读应用页面上的“更多信息”注释,了解关于@@@的内容。
你可以使用Most和Rest代替Partition来形成第一和第二参数的列表,然后使用MapThread将它们组合起来:
In[14]:= MapThread[PercentDecrease, {Most[list], Rest[list]}]
Out[14]= {(-a + b)/a, (-b + c)/b, (-c + d)/c, (-d + e)/d}
另一种方法是将操作(减法和除法)分成两步,如下所示:
In[10]:= Differences[list] / Most[list]
Out[10]= {(-a + b)/a, (-b + c)/b, (-c + d)/c, (-d + e)/d}
除法运算符 (/) threads 作用于两个列表 Differences[list]
和 Most[list]
。
Differences[#]/Most[#]& @ list
,但这只是我的个人偏好。 - rcollyer