2016-08-09 1 views
3

Ich habe eine Zeichenfolge, die wie folgt aussieht:Pythonic Art und Weise jede Sekunde Komma von String mit Leerzeichen zu ersetzen

coords = "86.2646484375,23.039297747769726,87.34130859375,22.59372606392931,88.13232421875,24.066528197726857" 

Was ich will, ist es zu diesem Format zu bringen:

coords = "86.2646484375,23.039297747769726 87.34130859375,22.59372606392931 88.13232421875,24.066528197726857" 

So in jede zweite Zahl, um das Komma durch ein Leerzeichen zu ersetzen. Gibt es einen einfachen, pythischen Weg, dies zu tun?

Im Moment versuche ich es mit der Split-Funktion zu tun, um eine Liste zu erstellen und dann die Liste zu durchlaufen. Aber es scheint eher nicht geradlinig.

+1

'Liste (zip (c.split (" "), c.split (",") [1:])) [:: 2] ', vielleicht? Sieht irgendwie hässlich aus. – senshin

Antwort

12

Lassen Sie uns zunächst mit dem regulären Ausdruck Modul importieren und definieren Sie Ihre coords Variable:

>>> import re 
>>> coords = "86.2646484375,23.039297747769726,87.34130859375,22.59372606392931,88.13232421875,24.066528197726857" 

Nun lassen Sie uns jede Sekunde Komma mit einem Leerzeichen ersetzen:

>>> re.sub('(,[^,]*),', r'\1 ', coords) 
'86.2646484375,23.039297747769726 87.34130859375,22.59372606392931 88.13232421875,24.066528197726857' 

Der reguläre Ausdruck (,[^,]*), loo ks für Komma-Paare. Der Ersetzungstext r'\1 ' behält das erste Komma bei, ersetzt aber das zweite durch ein Leerzeichen.

+0

Danke. Das ist cool. – user1919

2

Diese Art der Arbeiten:

>>> s = coords.split(',') 
>>> s 
['86.2646484375', '23.039297747769726', '87.34130859375', '22.59372606392931', '88.13232421875', '24.066528197726857'] 
>>> [','.join(i) for i in zip(s[::2], s[1::2])] 
['86.2646484375,23.039297747769726', '87.34130859375,22.59372606392931', '88.13232421875,24.066528197726857'] 
+0

oder '[i + ',' + j für i, j in zip (heraus, heraus [1:])]] –

1

Der pythonic Weg ist, den String und kommt wieder zu teilen, mit den alternierenden Begrenzungszeichen:

from itertools import chain, cycle, izip 
coords = ''.join(chain.from_iterable(izip(coords.split(','), cycle(', ')))) 
Verwandte Themen