因此,对于我的离散数学建模课中的作业问题,我们被要求在Mathematica中创建一个函数,该函数输入一个列表并对该列表的每个元素进行平方。这是一项简单的任务,我已经完成了以下工作:
sqList[list_] = (list)^2;
但我想用“for循环”来做这件事。这是我的代码:
sqList2[list2_] :=
(
For[j = 1, j <= Length[list2], j++,
(
list2[j]^2;
)];
list2
);
我更习惯于Matlab,并试图提升学习曲线。这段代码对我来说很有意义,并且非常感谢我应该采取的任何方向。我已经尝试过调试这段代码,但就像我说的那样,我不习惯这个程序,也不习惯它的堆栈轨道。我找不到任何问题,但它输出我输入的确切列表。
答案 0 :(得分:2)
使用示例列表
list = {1, 2, 3};
sqList[list_] := list^2
sqList[list]
{1,4,9}
这是有效的,因为Power
( ^
)是可列出的:
Attributes[Power]
{Listable,NumericFunction,OneIdentity,Protected}
按元素处理列表元素
sqList2[list2_] := Module[{squaredlist = {}, j},
For[j = 1, j <= Length[list2], j++,
AppendTo[squaredlist, list2[[j]]^2]];
squaredlist]
sqList2[list]
{1,4,9}
或者可以使用Map
sqList3[list3_List] := Map[#^2 &, list3]
sqList3[list]
{1,4,9}
注意强>
这种形式的功能,与您尝试过的功能相近,不会起作用,因为list2
是一个输入变量,无法修改。
sqList2[list2_] := (
For[j = 1, j <= Length[list2], j++,
list2[[j]] = list2[[j]]^2];
list2)
使其工作的最小修改是: -
sqList2[list2input_] := (
list2 = list2input;
For[j = 1, j <= Length[list2], j++,
list2[[j]] = list2[[j]]^2];
list2)
此外,For
循环不输出运行结果;这就是为什么需要在循环内收集输出。