Заменить и удалить элементы из строки - PullRequest
1 голос
/ 07 марта 2019

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

my_string = '[[4.6, 4.3, 4.3, 85.05], [8.75, 5.6, 6.6, 441.0], [4.6, 4.3, 4.3, 85.9625]]'

такой, что он дает такой результат

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

last_item = '85.05 441.0 85.9625'

Последние элементы в списке не имеют фиксированной длины Для первой цели я написал

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

Но мне нужен более питонический способ.

Ответы [ 3 ]

4 голосов
/ 07 марта 2019

Попробуйте, если my_string = '[[4.6, 4.3, 4.3, 85.05], [8.75, 5.6, 6.6, 441.0], [4.6, 4.3, 4.3, 85.9625]]':

import ast
my_string = " ".join(["x".join([str(k) for k in i[:-1]]) for i in ast.literal_eval(my_string)])
last_item = " ".join([str(k[-1]) for k in ast.literal_eval(my_string)])

ОБНОВЛЕНИЕ :

По вашему вопросу my_string = '[[4.6, 4.3, 4.3, 85.05], [8.75, 5.6, 6.6, 441.0] [4.6, 4.3, 4.3, 85.9625]]'. Если вы собираетесь использовать это как my_string, попробуйте это:

my_string = " ".join(["x".join([str(k) for k in i[:-1]]) for i in [i.replace(",","").split() for i in my_string.replace("[","").split("]") if len(i) >1]])
last_item = " ".join([str(k[-1]) for k in [i.replace(",","").split() for i in my_string.replace("[","").split("]") if len(i) >1

Во втором случае мы сначала делаем my_string.replace("[",""), что приводит к '4.6, 4.3, 4.3, 85.05], 8.75, 5.6, 6.6, 441.0] 4.6, 4.3, 4.3, 85.9625]]'. Теперь мы разбиваем их на .split("]"), что приводит к ['4.6, 4.3, 4.3, 85.05', ', 8.75, 5.6, 6.6, 441.0', ' 4.6, 4.3, 4.3, 85.9625', '', '']. Нам нужно удалить элементы, которые являются просто пустой строкой, поэтому мы включаем if len(i) >1 часть в понимание списка. Теперь мы получаем ['4.6, 4.3, 4.3, 85.05', ', 8.75, 5.6, 6.6, 441.0', ' 4.6, 4.3, 4.3, 85.9625']. Нам нужно убрать запятые в строковых элементах списка. Таким образом, для каждого элемента в этом списке мы делаем .replace(",",""), а затем следует .split(), что теперь приводит к [['4.6', '4.3', '4.3', '85.05'], ['8.75', '5.6', '6.6', '441.0'], ['4.6', '4.3', '4.3', '85.9625']]. Теперь для каждого подсписка мы берем элементы до последнего и делаем "x".join() и присваиваем my_string. Взяв этот список, мы можем добавить все последние элементы с помощью " ".join() и присвоить их переменной last_item.

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

Ваша строка выглядит как допустимая строка json.Может быть так:

import json
def to_str(lst):
    return 'x'.join([str(e) for e in lst])
my_string = '[[4.6, 4.3, 4.3, 85.05], [8.75, 5.6, 6.6, 441.0], [4.6, 4.3, 4.3, 85.9625]]'
temp = json.loads(my_string)
first_items = ' '.join([to_str(x[:-1]) for x in temp])
last_items = ' '.join([str(x[-1]) for x in temp])
print(first_items)
print(last_items)
0 голосов
/ 07 марта 2019

Попробуйте использовать dict

my_string = '[[4.6, 4.3, 4.3, 85.05], [8.75, 5.6, 6.6, 441.0], [4.6, 4.3, 4.3,` 85.9625]]'

    b = {'[': '', ']': '', ',': 'x'}
    for x, y in b.items():
        my_string = my_string.replace(x, y)
    print(my_string)
...