Заменить пробелы в списке - PullRequest
0 голосов
/ 05 марта 2019

Я хочу заменить my_string

my_string = '[[4.6, 4.3, 4.3], [8.75, 5.6, 6.6], [4.6, 4.3, 4.3]]'

таким, чтобы он давал такой результат

my_string = '4.6x4.3x4.3 8.75x5.6x6.6 4.6x4.3x4.3'

Я пробовал это, но это также заполняет пустое пространство с "x" тоже

mystring = mystring.replace("[","").replace("]","").replace(", ","x")

Есть ли лучший питонский способ сделать это?

Ответы [ 5 ]

0 голосов
/ 05 марта 2019

Вы можете использовать регулярные выражения для извлечения содержимого подсписков:

import re

s = '[[4.6, 4.3, 4.3], [8.75, 5.6, 6.6], [4.6, 4.3, 4.3]]'

' '.join(i.replace(', ', 'x') for i in re.findall(r'\[([^\[\]]+)\]', s))
# 4.6x4.3x4.3 8.75x5.6x6.6 4.6x4.3x4.3
0 голосов
/ 05 марта 2019

Вы можете использовать eval напрямую без импорта ast.

my_string = '[[4.6, 4.3, 4.3], [8.75, 5.6, 6.6], [4.6, 4.3, 4.3]]'
my_list = eval(my_string)
result = ' '.join(['x'.join("{}".format(item) for item in sub_list) for sub_list in my_list])

OUTPUT :

'4.6x4.3x4.3 8.75x5.6x6.6 4.6x4.3x4.3'
0 голосов
/ 05 марта 2019

разделите его на ], и сделайте то, что вы уже делаете:

my_string = '[[4.6, 4.3, 4.3], [8.75, 5.6, 6.6], [4.6, 4.3, 4.3]]'

for e in my_string.split("],"):
    print(e.replace("[","").replace("]","").replace(", ","x"), end = "")

ВЫХОД :

4.6x4.3x4.3 8.75x5.6x6.6 4.6x4.3x4.3
0 голосов
/ 05 марта 2019

Вы можете использовать это:

import ast
str = '[[4.6, 4.3, 4.3], [8.75, 5.6, 6.6], [4.6, 4.3, 4.3]]'
my_list = ast.literal_eval(str)
result = ' '.join(['x'.join("{}".format(item) for item in sub_list) for sub_list in my_list])
print(result)

enter image description here

0 голосов
/ 05 марта 2019

Попробуйте это:

import ast
my_string = '[[4.6, 4.3, 4.3], [8.75, 5.6, 6.6], [4.6, 4.3, 4.3]]'
mystring = " ".join(["x".join([str(k) for k in i]) for i in ast.literal_eval(my_string)])
# mystring = '4.6x4.3x4.3 8.75x5.6x6.6 4.6x4.3x4.3'
...