|
2.4.2 指標によるリストの操作

リストの部分の抽出
これは部分1と3のリストを与える.
In[1]:= {a, b, c, d}[[{1, 3}]]
Out[1]= 
これはネストしたリストである.
In[2]:= m = {{a, b, c}, {d, e}, {f, g, h}};
これは最初と3番目の部分のリストを与える.
In[3]:= m[[{1, 3}]]
Out[3]= 
これはこれらそれぞれの最初の部分のリストを与える.
In[4]:= m[[{1, 3}, 1]]
Out[4]= 
これは最初の2つの部分のリストを与える.
In[5]:= m[[{1, 3}, {1, 2}]]
Out[5]= 
これはすべてのサブリストの2番目の部分を与える.
In[6]:= m[[All, 2]]
Out[6]= 
m[[... ]] = valueのような割当てを使うとリストの一部をいつでもリセットすることができる.
これはmの部分1と2をリセットする.
In[7]:= m[[1, 2]] = x
Out[7]= 
これによりmの形はこうなった.
In[8]:= m
Out[8]= 
これは部分1をxに,部分3をyにリセットする.
In[9]:= m[[{1, 3}]] = {x, y}; m
Out[9]= 
これは部分1と3の両方をpにリセットする.
In[10]:= m[[{1, 3}]] = p; m
Out[10]= 
これはmというもとの形を回復する.
In[11]:= m = {{a, b, c}, {d, e}, {f, g, h}};
これはm[[{1, 3}, {1, 2}]]で指定したすべての部分をリセットする.
In[12]:= m[[{1, 3}, {1, 2}]] = x; m
Out[12]= 
Rangeを用いて指定範囲のすべての指標を示すことができる.
In[13]:= m[[Range[1, 3], 2]] = y; m
Out[13]= 
ネストしたリストを,各要素は座標の指標で与えられた位置にあり全体が空間に置かれている,と考えると便利なことがある.このように考えるとlist[[ , , ... ]]を直接幾何学的に解釈したものが存在することになる.もし が単一の整数なら,それはk次元の単一スライスを抽出することを表し,これがリストの場合は平行スライスのリストを抽出することを表す.list[[ , , ... ]]の最終結果は連続する次元をスライスして取得した要素の集合になる.
これは2次元配列に置かれたネストしたリストである.
In[14]:= (m = {{a, b, c}, {d, e, f}, {g, h, i}}) // TableForm
Out[14]//TableForm= 
行1および3を,次いで列1および2を取り出す.
In[15]:= m[[{1, 3}, {1, 2}]] // TableForm
Out[15]//TableForm= 
Partはネストしたリストの構造化されたスライスを取り出しやすいように設定されている.しかし,場合によっては個々の部分の任意の集合を取り出したいこともあるだろう.そのような場合はExtractを使うとよい.

スライスの取得と個々の部分の取得
これは個々の部分1,3と1,2を抽出する.
In[16]:= Extract[m, {{1, 3}, {1, 2}}]
Out[16]= 
Extractの重要な機能に,Positionのような関数で返されるのと同じ形の部分の位置のリストを取るというものがある.
これはネストしたリストを設定する.
In[17]:= m = {{a[1], a[2], b[1]}, {b[2], c[1]}, {{b[3]}}};
これはmにおける位置のリストを与える.
In[18]:= Position[m, b[_]]
Out[18]= 
これはそれらの位置にある要素を抽出する.
In[19]:= Extract[m, %]
Out[19]= 

リスト中の連続する要素の抽出と除去
これは位置2から初めて1つ置きの要素を取り出す.
In[20]:= Take[{a, b, c, d, e, f, g}, {2, -1, 2}]
Out[20]= 
これは1つ置きの要素を除去する.
In[21]:= Drop[{a, b, c, d, e, f, g}, {2, -1, 2}]
Out[21]= 
Partと同じようにTakeやDropもネストしたリストの連続したレベルで一連のスライスを取り出すと見ることができる.TakeやDropを使って配列における要素のブロックを扱うこともできる.
これは 配列である.
In[22]:= (m = {{a, b, c}, {d, e, f}, {g, h, i}}) // TableForm
Out[22]//TableForm= 
これは最初の の部分配列である.
In[23]:= Take[m, 2, 2] // TableForm
Out[23]//TableForm= 
これは最初の2列の全要素を取り出す.
In[24]:= Take[m, All, 2] // TableForm
Out[24]//TableForm= 
これは最初の2列の要素はひとつも残さない.
In[25]:= Drop[m, None, 2] // TableForm
Out[25]//TableForm= 

リストへの要素の挿入とリストからの要素の除去
これはリスト中の要素2,1をxにする.
In[26]:= Insert[{{a, b, c}, {d, e}}, x, {2, 1}]
Out[26]= 
これで再び要素を削除する.
In[27]:= Delete[%, {2, 1}]
Out[27]= 

リストの部分の置き換え
これはリストの3番目の要素をxで置換する.
In[28]:= ReplacePart[{a, b, c, d}, x, 3]
Out[28]= 
これはリストの最初と4番目の部分を置換する.複数の部分の指定には二重リストが必要である.
In[29]:= ReplacePart[{a, b, c, d}, x, {{1}, {4}}]
Out[29]= 
これは 単位行列である.
In[30]:= IdentityMatrix[3]
Out[30]= 
これは行列の2,2コンポーネントをxで置換する.
In[31]:= ReplacePart[%, x, {2, 2}]
Out[31]= 
|