|
2.4.4 リストの分割と充填

リスト要素の分割
これは3つのブロックに分割する.
In[1]:= Partition[{a, b, c, d, e, f}, 3]
Out[1]= 
次はオフセット1で3つずつのブロックに分割する.
In[2]:= Partition[{a, b, c, d, e, f}, 3, 1]
Out[2]= 
オフセットはブロックの大きさよりも大きくても構わない.
In[3]:= Partition[{a, b, c, d, e, f}, 2, 3]
Out[3]= 
同一要素のグループに分割する.
In[4]:= Split[{1, 4, 1, 1, 1, 2, 2, 3, 3}]
Out[4]= 
隣接する要素が同一ではないグループに分割する.
In[5]:= Split[{1, 4, 1, 1, 1, 2, 2, 3, 3}, Unequal]
Out[5]= 
Partitionは事実上リストの連続する要素をサブリストに分ける.デフォルトではもとのリストから「はみ出す」サブリストは含まない.
これははみ出しが起る前に停止する.
In[6]:= Partition[{a, b, c, d, e}, 2]
Out[6]= 
これもはみ出しが起る前に停止する.
In[7]:= Partition[{a, b, c, d, e}, 3, 1]
Out[7]= 
Partitionを使ってもとのリストの端がはみ出すサブリストを含ませることもできる.デフォルトではもとのリストを循環的に使って追加要素を埋めていく.指定した要素で充填することも可能である.
これはもとのリストを循環的に扱った追加的なサブリストを含んでいる.
In[8]:= Partition[{a, b, c, d, e}, 3, 1, {1, 1}]
Out[8]= 
もとのリストが要素xで充填されている.
In[9]:= Partition[{a, b, c, d, e}, 3, 1, {1, 1}, x]
Out[9]= 
こうすると要素xとyを使って循環的に充填する.
In[10]:= Partition[{a, b, c, d, e}, 3, 1, {1, 1}, {x, y}]
Out[10]= 
この場合は充填はせず,長さが違うサブリストが与えられる.
In[11]:= Partition[{a, b, c, d, e}, 3, 1, {1, 1}, {}]
Out[11]= 
Partitionはテンプレートに沿ってサブリストを抽出し,もとのリストから要素を取り出すものだと考えることができる.このプロセスをどこから始めどこで終了するかをPartitionに指示することができる.
これはもとのリストと重なるすべてのサブリストを与える.
In[12]:= Partition[{a, b, c, d}, 3, 1, {-1, 1}, x]
Out[12]= 
こうすると最初の部分しか重ならない.
In[13]:= Partition[{a, b, c, d}, 3, 1, {-1, -1}, x]
Out[13]= 

整列と充填の指定
整列指定  ,  はPartitionに,もとのリストの最初の要素が最初のサブリストの位置 にあり,もとのリストの最後の要素が の位置にある一連のサブリストを与えるように指示する.
aが最初のサブリストの位置1になるようにする.
In[14]:= Partition[{a, b, c, d}, 3, 1, {1, 1}, x]
Out[14]= 
aが最初のサブリストの位置2になるようにする.
In[15]:= Partition[{a, b, c, d}, 3, 1, {2, 1}, x]
Out[15]= 
aがまず位置4になる.
In[16]:= Partition[{a, b, c, d}, 3, 1, {4, 1}, x]
Out[16]= 
与えられたリストから循環的に充填する.
In[17]:= Partition[{a, b, c, d}, 3, 1, {4, 1}, {x, y}]
Out[17]= 
ListConvolveのような関数はPartitionと同じ整列と充填指定を使う.
場合によってはリストに明示的に充填を挿入すると便利なことがある.その場合はPadLeftとPadRightを使うとよい.

リストの充填
リストの長さが6になるように充填する.
In[18]:= PadLeft[{a, b, c}, 6]
Out[18]= 
{x, y}を循環的に挿入して充填する.
In[19]:= PadLeft[{a, b, c}, 6, {x, y}]
Out[19]= 
これもまた右側に3のマージンを残す.
In[20]:= PadLeft[{a, b, c}, 10, {x, y}, 3]
Out[20]= 
PadLeft,PadRight,Partitionはネストしたリストに使うことができる.
これで の配列を作る.
In[21]:= PadLeft[{{a, b}, {e}, {f}}, {3, 3}, x]
Out[21]= 
この配列をオフセット1で のブロックに分割する.
In[22]:= Partition[%, {2, 2}, {1, 1}]
Out[22]= 
充填指定にネストしたリストを使うと,各レベルでリストの要素が循環的に使われる.
こうすると充填リストのコピーが循環的に使われる.
In[23]:= PadLeft[{{a, b}, {e}, {f}}, {4, 4}, {{x, y}, {z, w}}]
Out[23]= 
これは充填のみからなるリストである.
In[24]:= PadLeft[{{}}, {4, 4}, {{x, y}, {z, w}}]
Out[24]= 
|