2017-03-14 2 views
0

ich eine Zeichenfolge, die wie folgt aussieht:Split-String in der Liste des Schwimmer

'-300.0,120.0; -186.0,120.0; -106.0,80.0; -78.0,55.0; -57.0,40.0; -29.0,15.0; -10.0,15.0; 10.0,-11.0; 19.0,-11.0; 28.0,-12.0; 57.0,-27.5; 78.0,-37.0; 106.0,-50.0; 150.0,-70.0; 186.0,-90.0; 236.0,-110.0; 300.0,-120.0' 

Ich mag ein Streudiagramm tun, bevor die Säule auf der X-Achse Zahlen und auf der Y-Achse Zahlen nach dem Säule. Jedes Paar ist durch ';' getrennt.

Ich habe zahlreiche Strings wie folgt in einer Liste, so kann ich nicht read_csv verwenden oder so funktionieren.

Gibt es eine Möglichkeit, dies in eine Liste von Tupeln zu formatieren? Oder 2 Listen?

Danke

+2

Versuchen [str.split] (https: //docs.python.org/2/library/stdtypes.html#str.split) und [float] (https://docs.python.org/2/ library/functions.html? highlight = float # float) – zvone

+0

Es sieht so aus, als ob Sie wollen, dass wir einen Code für Sie schreiben. Während viele Benutzer bereit sind, Code für einen in Not geratenen Coder zu produzieren, helfen sie normalerweise nur, wenn das Poster bereits versucht hat, das Problem selbst zu lösen. Eine gute Möglichkeit, diesen Aufwand zu demonstrieren, besteht darin, den Code, den Sie bisher geschrieben haben (einen [mcve] zu bilden), die Beispieleingabe (falls vorhanden), die erwartete Ausgabe und die tatsächlich erhaltene Ausgabe (Ausgabe, Rückverfolgung, etc.). Je mehr Details Sie angeben, desto mehr Antworten erhalten Sie wahrscheinlich. Überprüfen Sie die [Tour] und [fragen]. – TigerhawkT3

Antwort

3

Ja, Einliner. Split nach ;, dann iterieren auf diesem Strings und Split/konvertieren zu schweben, Kraft Iteration in einem tuple zum Beispiel:

s = '-300.0,120.0; -186.0,120.0; -106.0,80.0; -78.0,55.0; -57.0,40.0; -29.0,15.0; -10.0,15.0; 10.0,-11.0; 19.0,-11.0; 28.0,-12.0; 57.0,-27.5; 78.0,-37.0; 106.0,-50.0; 150.0,-70.0; 186.0,-90.0; 236.0,-110.0; 300.0,-120.0' 

tuples = [tuple(float(y) for y in x.split(",")) for x in s.split(";")] 

print(tuples) 

oder map verwenden, etwas schneller, und arbeitet auf Python 3 wegen gezwungen Iteration tuple:

tuples = [tuple(map(float,x.split(","))) for x in s.split(";")] 

Ergebnis:

[(-300.0, 120.0), (-186.0, 120.0), (-106.0, 80.0), (-78.0, 55.0), (-57.0, 40.0), (-29.0, 15.0), (-10.0, 15.0), (10.0, -11.0), (19.0, -11.0), (28.0, -12.0), (57.0, -27.5), (78.0, -37.0), (106.0, -50.0), (150.0, -70.0), (186.0, -90.0), (236.0, -110.0), (300.0, -120.0)] 
0

das Plotten Teil für das Hinzufügen Sake der Fertigstellung:

import matplotlib.pyplot as plt 

s = '-300.0,120.0; -186.0,120.0; -106.0,80.0; -78.0,55.0; ' \ 
    '-57.0,40.0; -29.0,15.0; -10.0,15.0; 10.0,-11.0; 19.0,-11.0; ' \ 
    '28.0,-12.0; 57.0,-27.5; 78.0,-37.0; 106.0,-50.0; 150.0,-70.0; ' \ 
    '186.0,-90.0; 236.0,-110.0; 300.0,-120.0' 

v = [tuple(map(float, t.split(","))) for t in s.split("; ")] 

plt.scatter(*zip(*v)) 
plt.show() 

Um zwei separate Sequenzen:

x, y = zip(*v) 

plt.scatter(x, y) 
plt.show() 

Oder:

x = [w[0] for w in v] 
y = [w[1] for w in v] 

plt.scatter(x, y) 
plt.show() 

Oder:

x = [a for a, b in v] 
y = [b for a, b in v] 

plt.scatter(x, y) 
plt.show()