构建列表

Wolfram 语言中广泛使用列表,有许多不同的方法可用来构建列表.

Range[n]列表 {1,2,3,,n}
Table[expr,{i,n}]i1nexpr 的值
Array[f,n]列表 {f[1],f[2],,f[n]}
NestList[f,x,n]具有 n 个嵌套的{x,f[x],f[f[x]],}
Normal[SparseArray[{i1->v1,},n]]长度为 n 的列表,元素 ikvk
Apply[List,f[e1,e2,]]列表 {e1,e2,}

用以构建列表的一些明确方式.

这里给出以2为幂的前5个值的列表.
In[1]:=
Click for copyable input
Out[1]=
以下是取得相同结果的另一种方式.
In[2]:=
Click for copyable input
Out[2]=
这里给出相似的列表.
In[3]:=
Click for copyable input
Out[3]=
SparseArray 帮助用户在特定位置指定值.
In[4]:=
Click for copyable input
Out[4]=
也可以使用模式来指定值.
In[5]:=
Click for copyable input
Out[5]=

通常情况下,用户可以提前知道一个列表应该有多长,并且每个元素应该如何生成. 而且,用户可以从一个列表得到另一个列表.

Table[expr,{i,list}]ilist 中取值时, expr 的值
Map[f,list]list 的每个元素应用 f
MapIndexed[f,list]对于第 i 个元素,给出 f[elem,{i}]
Cases[list,form]给出与 form 匹配的 list 的元素
Select[list,test]选出 test[elem]True 的元素
Pick[list,sel,form]选出 list 的元素,sel 相应的元素与 form 匹配
TakeWhile[list,test]只要 test[ei]True,从 list 的开头给出元素 ei
list[[{i1,i2,}]]Part[list,{i1,i2,}]
给出 list 指定部分的列表

从其它列表构建列表.

这里选出小于5的元素.
In[6]:=
Click for copyable input
Out[6]=
这里选出不小于5的第一个元素.
In[7]:=
Click for copyable input
Out[7]=
这里明确给出编号部分.
In[8]:=
Click for copyable input
Out[8]=
这里选出第二个列表中 1 所对应的元素.
In[9]:=
Click for copyable input
Out[9]=

有时候,用户可能想要在程序执行过程中积累结果列表. 这可以使用 SowReap 实现.

Sow[val]对于最接近的 Reap,进行值 val 的sow操作
Reap[expr]计算 expr,并返回 Sow 产生的值的列表

使用 SowReap.

该程序对一个数进行迭代求平方.
In[10]:=
Click for copyable input
Out[10]=
这里进行同样的计算,但这里把大于1000的中间结果累积成列表.
In[11]:=
Click for copyable input
Out[11]=

另一个效率比较低的方法涉及引入一个临时变量,并以 t={} 开始,然后连续使用 AppendTo[t,elem].