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
を使用して同じコード行を試してみましたが、それが正常に動作し、私はPrependTo
がp
の値に関数が呼び出されるたびに更新されるため、これがあると仮定します。たとえば、PrependTo[p, {#[[2]], "t"}] & /@ twos;
Join
ではなく、PrependTo
を使用する方が時間効率が良いかどうかを判断するためでした。しかし、私が答えを得る前に、この問題に遭遇しました。
Map
を使用してループを使用してリストを実行した場合と同じ結果を得るには、なぜReverse[]
をリストに適用する必要があるのでしょうか。誰かがこれがなぜこのような理由で説明できるのだろうか?私はMap
がリストフォワードを実行すると仮定したでしょう。しかし、この動きは、リストを逆方向にたどっているかのように私には見えます。
ご協力いただきありがとうございます。
あなたが実際に道によってたかったのは何ouputを? –
私の出力をqと同じにしたい。だから、基本的には、Joinを使用してTableを使用することから得られる、JoinでMapを使用して同じ出力を得たいと思っています。 – Steve