Mathematica 9 is now available
Previous section-----Next section

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].



Any questions about topics on this page? Click here to get an individual response.Buy NowMore Information
THIS IS DOCUMENTATION FOR AN OBSOLETE PRODUCT.
SEE THE DOCUMENTATION CENTER FOR THE LATEST INFORMATION.