Wolfram mathematica Mathematics映射和连接函数一起使用

Wolfram mathematica Mathematics映射和连接函数一起使用,wolfram-mathematica,Wolfram Mathematica,我一直在摆弄一些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[

我一直在摆弄一些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}}}

据我所知,第二次
Join
/@
Map
函数一起使用,p中当前为
{C,t},{B,t},{A,t}
的每个列表项应用于
Join
函数,并添加到结果列表中。是否有一种方法可以使用
Map
,而是每次将连接应用于
p
的新值,以获得与
q
的值完全相同的结果,但只需一行代码即可实现

我使用
PrependTo
而不是
Join
尝试了同一行代码,效果很好,我假设这是因为
PrependTo
每次调用函数时都会更新
p
的值。例如
PrependTo[p,{#[[2]],“t}]&/@twos

我尝试这样做的原因是为了确定使用
Join
是否比使用
PrependTo
更省时。但在我得到答案之前就遇到了这个问题

另一件我不太明白的事情是,为什么在使用
Map
时需要对列表应用
Reverse[]
,以获得与使用循环遍历列表相同的结果。有人能解释一下为什么会这样吗?!我假设
Map
会在一个列表中运行。但在我看来,这种行为似乎是在倒退


提前感谢您的帮助。

地图确实像您预期的那样,以左右方向遍历列表。我怀疑您的代码后面的元素引入了反转

例如:

Sqrt /@ Select[Range@10, OddQ] 
给出{1,Sqrt[3],Sqrt[5],Sqrt[7],3}

如果要将某个函数应用于列表中的函数,将另一个函数应用于这两个函数,函数式语言中的结构可能如下所示:

ans=Join[f1 /@ Select[myList, #[[1]] == 1 &], f2 /@ Select[myList, #[[1]] == 2 &]]
根据你的澄清:

产生q的方法1:

Reverse /@ Reverse@list /. {2 -> "t", 1 -> "t"}
方法2:

Reverse@Join[{Last@#, "t"} & /@ Select[list, #[[1]] == 1 &], {Last@#, "t"} & /@ Select[list, First@# == 2 &]]

顺便问一下,你到底想要什么输出?我希望我的输出和q一样。所以,基本上,我希望在连接中使用Map获得相同的输出,即使用Table和Join得到的输出。
Reverse@Join[{Last@#, "t"} & /@ Select[list, #[[1]] == 1 &], {Last@#, "t"} & /@ Select[list, First@# == 2 &]]