2.4.1 Constructing ListsLists are widely used in Mathematica, and there are many ways to construct them.
| Range[n] | the list {1, 2, 3, ... , n} | | Table[expr, {i, n}] | the values of expr with i from 1 to n | | Array[f, n] | the list {f[1], f[2], ... , f[n]} | | NestList[f, x, n] | {x, f[x], f[f[x]], ... } with up to n nestings |
Normal[SparseArray[{ -> , ... }, n]]
| | a length n list with element being | Apply[List, f[ , , ... ]] | the list { , , ... } |
Some explicit ways to construct lists. | This gives a table of the first five powers of two. | |
In[1]:=
Table[2^i, {i, 5}]
|
Out[1]=
|
|
| Here is another way to get the same result. | |
Out[2]=
|
|
| This gives a similar list. | |
In[3]:=
NestList[2 #&, 1, 5]
|
Out[3]=
|
|
| SparseArray lets you specify values at particular positions. | |
In[4]:=
Normal[SparseArray[{3->x, 4->y}, 5]]
|
Out[4]=
|
|
| You can also use patterns to specify values. | |
In[5]:=
Normal[SparseArray[{i_ -> 2^i}, 5]]
|
Out[5]=
|
|
Often you will know in advance how long a list is supposed to be, and how each of its elements should be generated. And often you may get one list from another.
| Map[f, list] | apply f to each element of list | | MapIndexed[f, list] | give f[elem, {i}] for the i element | | Cases[list, form] | give elements of list that match form | | Select[list, test] | select elements for which test[elem] is True | | Pick[list, sel, form] | pick out elements of list for which the corresponding elements of sel match form |
list[[{ , , ... }]] or Part[list, { , , ... }]
| | give a list of the specified parts of list |
Constructing lists from other lists. | This selects elements larger than 5. | |
In[6]:=
Select[{1, 3, 6, 8, 10}, # > 5&]
|
Out[6]=
|
|
| This explicitly gives numbered parts. | |
In[7]:=
{a, b, c, d}[[{2, 1, 4}]]
|
Out[7]=
|
|
| This picks out elements indicated by a 1 in the second list. | |
In[8]:=
Pick[{a, b, c, d}, {1, 0, 1, 1}, 1]
|
Out[8]=
|
|
Sometimes you may want to accumulate a list of results during the execution of a program. You can do this using Sow and Reap.
| Sow[val] | sow the value val for the nearest enclosing Reap | | Reap[expr] | evaluate expr, returning also a list of values sown by Sow |
Using Sow and Reap. | This program iteratively squares a number. | |
Out[9]=
|
|
| This does the same computation, but accumulating a list of intermediate results above 1000. | |
In[10]:=
Reap[Nest[(If[# > 1000, Sow[#]]; #^2) &, 2, 6]]
|
Out[10]=
|
|
An alternative but less efficient approach involves introducing a temporary variable, then starting with t = {}, and successively using AppendTo[t, elem].
|