## 2.4.1 Constructing Lists

Lists 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.
 In[2]:=  Array[2^# &, 5]
 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.
 In[9]:=  Nest[#^2&, 2, 6]
 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].

THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.