Hallo,
jetzt mal eine wahrscheinlich ganz einfach zu beantwortende Frage von mir - aber ich komme nicht drauf, bin wie vernagelt.
Also, ich habe folgenden String (den mir eine Software ausgibt, die ich zu hassen beginne):
"0,400,0,463,0,536,0,621,0,719,0,833 ..."
Und dieser String möchte ich ultimativ in folgende Liste überführen:
[0.4,0.463,0.536,0.621,0.719,0.833, ...]
Wäre wohl ganz einfach, wenn ich eine einfach Funktion für das Ersetzen jeden zweiten Kommas hätte. Bis jetzt mache ich das zu Fuß und es ist einfach häßlich? Weiß von euch jemand eine etwas elegantere Lösung?
Gruß,
Christian
suchen / ersetzten
-
- User
- Beiträge: 15
- Registriert: Donnerstag 9. Februar 2006, 14:21
- Wohnort: Buchholz in der Nordheide
Also man könnte ja durchiterieren (ääks) und eben bei jedem durchlauf testen, ob beim Teilen des Durchlaufzählers ein Rest rauskommt oder nicht. somit kannst du prüfen, ob du einen geraden oder ungeraden Zähler hast. damit KÖNNTE man dann eben ersetzen.
geht vielleicht auch anders, aber das fiel mir grad so ein
geht vielleicht auch anders, aber das fiel mir grad so ein

Na ja, im Grunde mache ich so etwas: Ich zähle im Moment noch Kommate und ersetze, wenn Zähler teilbar durch zwei.
Deine Version würde nicht funktionieren (teilbar ohne Rest, wodurch auch immer, können alle der Ziffernfolgen sein), mal abgesehen davon, daß am Ende des Strings z. B. Folgen wie ...,1,e004,... stehen können.
Gruß,
Christian
Deine Version würde nicht funktionieren (teilbar ohne Rest, wodurch auch immer, können alle der Ziffernfolgen sein), mal abgesehen davon, daß am Ende des Strings z. B. Folgen wie ...,1,e004,... stehen können.
Gruß,
Christian
-
- User
- Beiträge: 15
- Registriert: Donnerstag 9. Februar 2006, 14:21
- Wohnort: Buchholz in der Nordheide
So hab ich das getestet:
sind keine Fehlerroutinen drin, aber vielleicht hilft das ja.
Code: Alles auswählen
from operator import mod
the_string = "0,400,0,463,0,536,0,621,0,719,0,833"
the_old_array = the_string.split(",")
the_new_array = []
print the_old_array
for v in range(len(the_old_array)-1):
if mod(v,2):
continue
the_new_array.append(float(str(the_old_array[v]+"."+the_old_array[v+1])))
print the_new_array
... und noch ein Vorschlag:
Helmut
Code: Alles auswählen
str="0,400,0,463,0,536,0,621,0,719,0,833,0"
li1=str.split(',')
i=0
li2=[]
while i<int(len(li1)/2)*2:
li2.append((li1[i]+"."+li1[i+1]).rstrip('0'))
i += 2
print li2
#['0.4', '0.463', '0.536', '0.621', '0.719', '0.833']
-
- Python-Forum Veteran
- Beiträge: 1209
- Registriert: Montag 29. September 2003, 17:18
- Wohnort: Purkersdorf (bei Wien [Austria])
... und noch einer (sonst wirds ja fad
):
Gruß, mawe

Code: Alles auswählen
s = "0,400,0,300,0,200,0,100"
l = s.split(",")
print [".".join(x) for x in zip(*[l[i::2] for i in range(2)])]
Na ja, im Grunde unterscheiden sich eure Version nicht allzusehr von meiner, aber ich habe ein wenig die Idee von Bennhardt aufgegriffen (spart mir zwei Zeilen Code) und habe jetzt:
(Wobei das "strip" und die "<100" daher kommen, daß ich den Fall etwas einfacher dagestellt habe, als er ist: Die Software, welche diese Daten generiert hat wirlich eine saumäßige Exportfunktion!)
mawe, Deine Lösung sieht zwar toll aus, erfüllt nur leider die Bedingungen nicht, weil diese Software eben die Daten dermaßen verfrutzelt, daß ... Ach, lassen wir das besser, es hat mich jetzt genug Nerven gekostet. Die Bemerkung von Dir Bennhardt ist leider nur ein schlechter Scherz für mich, denn schau mal auf die Zeile "if param == "Sizes"" (Jeder Parameter wird mit anderen Skalen assoziiert, obwohl alle in der selben Größenordnung sind! Und die Frage, wie ich mit dem Shiet denn überhaupt weiter rechnen soll, ist mit einem sauberen Import immer noch nicht beantwortet. Wahrscheinlich ist meine einzig wahre Option die: Kontaktaufnahme mit der Firma, die mein Meßgerät verkauft.)
Trotzdem: Vielen Dank für eure Hilfestellung!
Gruß,
Christian
Code: Alles auswählen
value = value.strip('"').split(",")
new_value = []
if param == "Sizes":
for v in range(len(value)-1):
if len(new_value) == 0 or new_value[-1] < 100:
if not ((v % 2) == 0):
continue
new_value.append(float(value[v] + "." + value[v+1]))
else:
new_value.append(value[v])
value = [float(x) for x in new_value]
mawe, Deine Lösung sieht zwar toll aus, erfüllt nur leider die Bedingungen nicht, weil diese Software eben die Daten dermaßen verfrutzelt, daß ... Ach, lassen wir das besser, es hat mich jetzt genug Nerven gekostet. Die Bemerkung von Dir Bennhardt ist leider nur ein schlechter Scherz für mich, denn schau mal auf die Zeile "if param == "Sizes"" (Jeder Parameter wird mit anderen Skalen assoziiert, obwohl alle in der selben Größenordnung sind! Und die Frage, wie ich mit dem Shiet denn überhaupt weiter rechnen soll, ist mit einem sauberen Import immer noch nicht beantwortet. Wahrscheinlich ist meine einzig wahre Option die: Kontaktaufnahme mit der Firma, die mein Meßgerät verkauft.)
Trotzdem: Vielen Dank für eure Hilfestellung!
Gruß,
Christian
Hallo mawe,
welche Bewandtnis hat es mit dem Stern in der letzten Codezeile?
Gruss, Helmut
welche Bewandtnis hat es mit dem Stern in der letzten Codezeile?
Code: Alles auswählen
print [".".join(x) for x in zip(*[l[i::2] for i in range(2)])]
-
- User
- Beiträge: 15
- Registriert: Donnerstag 9. Februar 2006, 14:21
- Wohnort: Buchholz in der Nordheide
Naja, das anfänglich geschilderte Problem war ja gelöst. Das Drumherum wird ja jetzt erst klarCM hat geschrieben:Die Bemerkung von Dir Bennhardt ist leider nur ein schlechter Scherz für mich...

Ich wollte dir sicher nicht ans Bein urinieren (



Vielleicht kannst du ja noch mehr "Exportschlager" der Software (oder Messgerät?)anbringen, um mehr Unterstützung hier zu bekommen.
helmut hat geschrieben:welche Bewandtnis hat es mit dem Stern in der letzten Codezeile?
Code: Alles auswählen
a = [1,2,3,"A","B","C"]
foo(a) # ruft foo mit a als Parameter auf
foo(*a) # ist identisch mit foo(a[0],a[1],a[2],a[3],a[4],a[5])
Habe ich auch nicht so verstanden. (Das dumme in Emails und Forenbeiträgen ist, daß man nie zu viele Emoticons setzten kann, damit Ironie ankommt und doch leicht zu viele setzt, die irritierend wirken ...)Bennhardt hat geschrieben:Ich wollte dir sicher nicht ans Bein urinieren ...
Gruß,
Christian