2010-12-23 3 views
5

Wie ersetze ich die Kommas auf der zweiten Ebene einer Liste durch Ersatzpfeile?Kommas in der Liste mit Pfeil ersetzen ->

Zum Beispiel diese:

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

Um dies:

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

Replace funktioniert nicht, weil es das Komma denkt nicht dort sein sollte. Um es in Anführungszeichen funktioniert nicht, noch tut StringReplace

Was ich denke, es sein sollte:

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

Antwort

9

Im Folgenden werden das gewünschte Ergebnis:

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

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

Für mich ist das die natürlichste Art, es zu tun. Hier ist eine andere Art und Weise, die die Verwendung einer Lambda-Funktion vermeidet:

List /@ Rule @@@ lop 

Mehr auf diesem Weg @@@ der Verwendung: In Mathematica, what does @@@ mean?

Wenn Sie nicht mögen @@@ Sie dies tun können:

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

Und hier ist noch ein anderer Weg, mit einer Ersetzungsregel:

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

Und was zum Teufel, hier ist das Mindeste, intuitive Art und Weise denke ich an, es zu tun:

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

(Beachten Sie, dass /. eine Abkürzung ist für ReplaceAll ist /@ Abkürzung für Map, @@ ist eine Abkürzung für Apply und [email protected] nur ein weiterer Weg ist f[x] zu schreiben.)

+3

Es gibt einen noch saubereren Weg es zu tun: 'Zusammensetzung [Liste, Regel] @@@ lop' –

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

Ergebnis:

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

Diese Dinge werden unter den Tutorials erklärt Muster und Transformationsregeln im Hilfesystem.

HTH!

bearbeiten

Sie können es tun, indem Strings mit ... aber es ist nicht der richtige Weg:

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

Edit 2

Die List[] und die Sequence[] sind zwei Konstrukte, die Sie verstehen müssen, um mit Mathematica zu arbeiten.

Ersetzen der Klammern oder das Komma in einer Liste ist nicht möglich, weil List[] eine Funktion ist und die {..,..,..,..} ist nur Notation.

Versuchen Sie folgendes zu verstehen:

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

und

{a, b} /. List -> Plus 
1

MapApply funktioniert gut hier:

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

Die OP mit Teil-Listen für ein Ergebnis fragen ... –

+0

Hoppla, danke! Das funktioniert dann: 'List/@ Rule @@@ {{a, Mädchen}, {b, Mädchen}, {c, Mädchen}, {e, Mädchen}, {g, Mädchen}}' –

Verwandte Themen