2010-12-23 67 views
5

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

例如,这样的:

{{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}] 

回答

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?

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

{[email protected]# -> [email protected]#}& /@ lop 

而这里的另一种方式,使用替换规则:

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

而且,究竟发生了什么,这里的最直观的方式我能想到的做到这一点:

[email protected]{Thread[[email protected]@Transpose[lop]]} 

(请注意,/.ReplaceAll速记,/@Map速记,@@Apply速记,和[email protected]只是另一种书写方式f[x]。)

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 = [email protected] 

编辑2

List[]Sequence[]是您必须了解两个构造,才能开始使用Mathematica。

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

请尝试以下方法理解:这里很好

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

{a, b} /. List -> Plus 
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} 
+0

该OP要求结果与子列表... – 2010-12-23 03:39:59

+0

哎呀,谢谢!然后这样做:`List/@ Rule @@@ {{a,girl},{b,girl},{c,girl},{e,girl},{g,girl}}` – 2010-12-24 17:37:18