Replacing commas in list with arrow ->
如何用替换箭头替换列表第二级的逗号?
例如,这:
1 | {{a, girl}, {b, girl}, {c, girl}, {e, girl}, {g, girl}} |
为此:
1 | {{a->girl}, {b->girl}, {c->girl}, {e->girl}, {g->girl}} |
也无效
我认为应该是:
1 | Replace[list,"," ->"->", {2}] |
以下给出了预期的结果:
1 2 3 | lop = {{a, girl}, {b, girl}, {c, girl}, {e, girl}, {g, girl}} (* list o' pairs *) {#1 -> #2}& @@@ lop |
对我来说,这是最自然的方式。
这是避免使用lambda函数的另一种方法:
1 | List /@ Rule @@@ lop |
有关使用
如果您不喜欢
1 | {First@# -> Last@#}& /@ lop |
这是使用替换规则的另一种方式:
1 | lop /. {x_,y_}->{x->y} |
这到底是什么,这是我想到的最不直观的方法:
1 | Transpose@{Thread[Rule@@Transpose[lop]]} |
(请注意,
1 | {{a, girl}, {b, girl}, {c, girl}, {e, girl}, {g, girl}}/.{x_, y_} -> {Rule[x,y]} |
结果:
1 | {{a -> girl}, {b -> girl}, {c -> girl}, {e -> girl}, {g -> girl}} |
这些内容在帮助系统中有关模式和转换规则的教程中进行了说明。
HTH!
编辑
您可以使用字符串...来做到这一点,但这不是正确的方法:
1 2 3 4 | x = ToString[{{a, girl}, {b, girl}, {c, girl}, {e, girl}, {g, girl}}]; y = StringReplace[x,"{" ~~ d_ ~~"," ~~ Shortest[f__] ~~"}" -> "{" ~~ d ~~"->" ~~ f ~~"}"]; z = ToExpression@y |
编辑2
不可能替换列表中的花括号或逗号,因为
尝试以下操作以了解它:
1 | {{a,b},{c,d}} //FullForm |
和
1 | {a, b} /. List -> Plus |
1 2 3 | 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} |