リストの構築

リストは Mathematica で広く使われており,構築方法もたくさんある.

Range[n]リスト
Table[expr,{i,n}]iから n までの expr の値
Array[f,n]リスト
NestList[f,x,n]最大 n までネストする
Normal[SparseArray[{i1->v1,...},n]]要素 である長さ n のリスト
Apply[List,f[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 番目の要素に を与える
Cases[list,form]form と一致する list の要素を与える
Select[list,test]Trueである要素を選び出す
Pick[list,sel,form]list 中の要素で,それに対応する sel の要素が form にマッチするものを拾い出す
TakeWhile[list,test]Trueである限りにおいて,list の最初から要素 を与える
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]=
これは2番目のリスト中でで示されている要素を抽出する.
In[9]:=
Click for copyable input
Out[9]=

プログラムの実行中,結果のリストを蓄積したいこともあるだろう.その際はSowReapを使うとよい.

Sow[val]val を,囲っている最も近くのReapに播く
Reap[expr]expr を評価し,Sowで播かれたリストの値も一緒に返す

SowReapを使う

このプログラムは数値を反復的に2乗する.
In[10]:=
Click for copyable input
Out[10]=
これも同じ計算をするが,1000より大きい途中結果を蓄積したリストを作る.
In[11]:=
Click for copyable input
Out[11]=

あまり効果的ではないがこれに代る方法として,一時的な変数を導入して から始め,連続的にAppendTo[t, elem]を使うというものがある.

New to Mathematica? Find your learning path »
Have a question? Ask support »