Wolfram mathematica Mathematics映射和连接函数一起使用
我一直在摆弄一些Mathematica代码来连接两个列表,但在将一个列表添加到另一个列表之前,我对其中一个列表进行了一些操作。比如我有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[
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 &]]