variable substitute mathematica for all list replace wolfram-mathematica

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] ).