用箭头替换列表中的逗号 - >

时间:2010-12-23 01:33:36

标签: list replace wolfram-mathematica

如何用替换箭头替换列表第二级的逗号?

例如,这个:

{{a, girl}, {b, girl}, {c, girl}, {e, girl}, {g, girl}}

对此:

{{a->girl}, {b->girl}, {c->girl}, {e->girl}, {g->girl}}

Replace不起作用,因为它认为逗号不应该存在。将它放在引号中不起作用,StringReplace

也不起作用

我认为它应该是:

Replace[list, "," -> "->", {2}]

3 个答案:

答案 0 :(得分:9)

以下给出了所需的结果:

lop = {{a, girl}, {b, girl}, {c, girl}, {e, girl}, {g, girl}} (* list o' pairs *)

{#1 -> #2}& @@@ lop

对我而言,这是最自然的方式。 这是另一种避免使用lambda函数的方法:

List /@ Rule @@@ lop

有关使用@@@In Mathematica, what does @@@ mean?

的更多信息

如果你不喜欢@@@,你可以这样做:

{First@# -> Last@#}& /@ lop

这是另一种方式,使用替换规则:

lop /. {x_,y_}->{x->y}

而且,到底是什么,这是我能想到的最不直观的方式:

Transpose@{Thread[Rule@@Transpose[lop]]}

(请注意,/.ReplaceAll的简写,/@Map的简写,@@Apply的简写,{ {1}}只是写f@x的另一种方式。)

答案 1 :(得分:4)

{{a, girl}, {b, girl}, {c, girl}, {e, girl}, {g, girl}}/.{x_, y_} -> {Rule[x,y]} 

结果:

{{a -> girl}, {b -> girl}, {c -> girl}, {e -> girl}, {g -> girl}}  

这些内容在帮助系统中的模式和转换规则教程中进行了解释。

HTH!

修改

你可以通过使用字符串来实现......但这不是正确的方法:

x = ToString[{{a, girl}, {b, girl}, {c, girl}, {e, girl}, {g, girl}}];
y = StringReplace[x, "{" ~~ d_ ~~ ", " ~~ Shortest[f__] ~~ "}" -> 
                     "{" ~~ d ~~ "->" ~~ f ~~ "}"];
z = ToExpression@y

编辑2

List[]Sequence[]是您开始使用Mathematica时必须了解的两个结构。

无法替换列表中的大括号或逗号,因为List[]是一个函数而{..,..,..,..}只是符号。

请尝试以下方法来理解它:

 {{a,b},{c,d}} //FullForm  

{a, b} /. List -> Plus

答案 2 :(得分:1)

MapApply在这里很好用:

In[1]:= Rule @@@ {{a, girl}, {b, girl}, {c, girl}, {e, girl}, {g, girl}}

Out[1]= {a -> girl, b -> girl, c -> girl, e -> girl, g -> girl}