J'ai une chaîne qui ressemble à ceci:

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

Ce que je veux, c'est l'amener à ce format:

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

Donc, dans chaque deuxième nombre pour remplacer la virgule par un espace. Existe-t-il un moyen simple et pythonique de le faire.

En ce moment, j'essaie de le faire en utilisant la fonction split pour créer une liste, puis parcourir la liste. Mais cela ne semble pas simple.

3
user1919 9 août 2016 à 20:28

3 réponses

Meilleure réponse

Importons d'abord le module d'expression régulière et définissons votre variable coords:

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

Maintenant, remplaçons chaque seconde virgule par un espace:

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

L'expression régulière (,[^,]*), recherche des paires de virgules. Le texte de remplacement, r'\1 ' conserve la première virgule mais remplace la seconde par un espace.

12
John1024 9 août 2016 à 17:32

La manière pythonique est de diviser la chaîne et de la rejoindre à nouveau, avec les délimiteurs alternés:

from itertools import chain, cycle, izip
coords = ''.join(chain.from_iterable(izip(coords.split(','), cycle(', '))))
2
Daniel 9 août 2016 à 17:47

Ce genre de travaux:

>>> 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']
3
zw324 9 août 2016 à 17:32