2012-03-24 17 views
0

Mathematicaのコードを2リストに追加していましたが、リストに追加する前にそのリストを操作していました。だから、例えば私がMathematicaのマップと結合関数を一緒に使う

list={{1, "A"}, {1, "B"}, {1, "C"}, {2, "D"}, {2, "E"}, {2, "F"}}; 
p = {}; 
q = {}; 

ones = Select[list, #[[1]] == 1 &]; 

p = Join[{#[[2]], "t"}, p] & /@ Reverse[ones]; 
Table[ 
    q = Join[{{ones[[m, 2]], "t"}}, q]; 
    , {m, Length[ones]}]; 

twos = Select[list, #[[1]] == 2 &]; 

p = Join[{{#[[2]], "t"}}, p] & /@ Reverse[twos]; 

Table[ 
    q = Join[{{twos[[m, 2]], "t"}}, q]; 
    , {m, Length[twos]}]; 

を持っているこれは、それぞれp、qは、以下の値が得られます。

p={{{F, t}, {C, t}, {B, t}, {A, t}}, {{E, t}, {C, t}, {B, t}, {A, t}}, {{D, t}, {C, t}, {B, t}, {A, t}}} 

q={{F, t}, {E, t}, {D, t}, {C, t}, {B, t}, {A, t}} 

を私が集めることができるものから、二度目Joinが使用されています/@またはMap関数では、現時点では{{C, t}, {B, t}, {A, t}}であるp内の各リストアイテムはに適用されます機能が追加され、結果のリストに追加されます。 Mapを使用し、毎回新しい値pに結合を適用して、qの値とまったく同じ結果を得ることができますが、1行のコードで達成できます。

私はPrependTo代わりのJoinを使用して同じコード行を試してみましたが、それが正常に動作し、私はPrependTopの値に関数が呼び出されるたびに更新されるため、これがあると仮定します。たとえば、PrependTo[p, {#[[2]], "t"}] & /@ twos;

Joinではなく、PrependToを使用する方が時間効率が良いかどうかを判断するためでした。しかし、私が答えを得る前に、この問題に遭遇しました。

Mapを使用してループを使用してリストを実行した場合と同じ結果を得るには、なぜReverse[]をリストに適用する必要があるのでしょうか。誰かがこれがなぜこのような理由で説明できるのだろうか?私はMapがリストフォワードを実行すると仮定したでしょう。しかし、この動きは、リストを逆方向にたどっているかのように私には見えます。

ご協力いただきありがとうございます。

答えて

0

地図は、あなたが予想している通り、左右に移動します。私はあなたのコードの後の要素が反転を導入していると思われます。例えば

:あなたからのものにいくつかの機能を適用する場合

Sqrt /@ Select[[email protected], OddQ] 

{1、開平演算[3]のSqrt [5]のSqrt [7]、3}

を与えます

:さらに、あなたの明確化から

ans=Join[f1 /@ Select[myList, #[[1]] == 1 &], f2 /@ Select[myList, #[[1]] == 2 &]] 

:関数型言語でのあなたのリストと補数に別の関数の構造は次のようになります。

方法1のqを生成する:

Reverse /@ [email protected] /. {2 -> "t", 1 -> "t"} 

方法2:

[email protected][{[email protected]#, "t"} & /@ Select[list, #[[1]] == 1 &], {[email protected]#, "t"} & /@ Select[list, [email protected]# == 2 &]] 
+0

あなたが実際に道によってたかったのは何ouputを? –

+0

私の出力をqと同じにしたい。だから、基本的には、Joinを使用してTableを使用することから得られる、JoinでMapを使用して同じ出力を得たいと思っています。 – Steve

関連する問題