list - for - mathematica substitute variable
Sustituir las comas en la lista con la flecha-> (3)
MapApply
funciona bien aquí:
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}
¿Cómo reemplazo las comas en el segundo nivel de una lista con flechas de reemplazo?
Por ejemplo, esto:
{{a, girl}, {b, girl}, {c, girl}, {e, girl}, {g, girl}}
A esto:
{{a->girl}, {b->girl}, {c->girl}, {e->girl}, {g->girl}}
Replace
no funciona porque cree que la coma no debería estar allí. Ponerlo entre comillas no funciona, ni lo hace StringReplace
Lo que creo que debería ser:
Replace[list, "," -> "->", {2}]
{{a, girl}, {b, girl}, {c, girl}, {e, girl}, {g, girl}}/.{x_, y_} -> {Rule[x,y]}
Resultado:
{{a -> girl}, {b -> girl}, {c -> girl}, {e -> girl}, {g -> girl}}
Estas cosas se explican en los tutoriales de patrones y reglas de transformación en el sistema de ayuda.
HTH!
Editar
Puedes hacerlo usando cadenas ... pero no es la manera correcta:
x = ToString[{{a, girl}, {b, girl}, {c, girl}, {e, girl}, {g, girl}}];
y = StringReplace[x, "{" ~~ d_ ~~ ", " ~~ Shortest[f__] ~~ "}" ->
"{" ~~ d ~~ "->" ~~ f ~~ "}"];
z = ToExpression@y
Editar 2
La List[]
y la Sequence[]
son dos construcciones que debe comprender para comenzar a trabajar con Mathematica.
No es posible reemplazar las llaves o la coma en una Lista, porque List[]
es una función y el {..,..,..,..}
es solo una notación.
Intenta lo siguiente para entenderlo:
{{a,b},{c,d}} //FullForm
y
{a, b} /. List -> Plus
Lo siguiente da el resultado deseado:
lop = {{a, girl}, {b, girl}, {c, girl}, {e, girl}, {g, girl}} (* list o'' pairs *)
{#1 -> #2}& @@@ lop
Para mí esa es la forma más natural de hacerlo. Aquí hay otra manera que evita el uso de una función lambda:
List /@ Rule @@@ lop
Más sobre la forma de usar @@@
: En Mathematica, ¿qué significa @@@?
Si no te gusta @@@
, puedes hacer esto:
{First@# -> Last@#}& /@ lop
Y aquí hay otra forma, usando una regla de reemplazo:
lop /. {x_,y_}->{x->y}
Y, qué diablos, esta es la forma menos intuitiva en que puedo pensar para hacerlo:
Transpose@{Thread[Rule@@Transpose[lop]]}
(Tenga en cuenta que /.
Es una abreviatura de ReplaceAll
, /@
es una abreviatura de Map
, @@
es una abreviatura de Apply
, y f@x
es simplemente otra manera de escribir f[x]
).