Объединить строковые элементы в списке на основе разделителей - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь объединить все элементы в списке на основе некоторых разделителей; Я сталкиваюсь с трудностями, когда пара разделителей больше 1.

Скажите, что это список:

['{','k0c','k1b','k2b','k3b','}','{','\\g0','\\g1','\\g2','\\g3','}']

12 наименований в этом списке

Всякий раз, когда он находит '{' и '}', я хочу, чтобы все элементы в этих индексах были объединены в один, так что это:

['{ k0c, k1b, k2b, k3b }' , '{\\g0 , \\g1, \\g2, \\g3 }' ]

2 элемента в этом списке - это то, что мне нужно, чтобы все элементы внутри разделителей превратились в один элемент списка.

Ответы [ 2 ]

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

Если в ваших данных нет вырожденных случаев, мы всегда будем ожидать, что '}','{' разделит ваши группы.

Следовательно, простой способ получить желаемый результат - объединить строки, разделить их на } и затем отформатировать получившиеся элементы списка.

l = ['{','k0c','k1b','k2b','k3b','}','{','\\g0','\\g1','\\g2','\\g3','}']
out = [x.replace("{,", "{").strip(", ") + " }" for x in ", ".join(l).split("}") if x]
print(out)
['{ k0c, k1b, k2b, k3b }', '{ \\g0, \\g1, \\g2, \\g3 }']
0 голосов
/ 29 марта 2019

Что-то вроде этого, нужно сделать свое дело:

input_data = [
    "{",
    "k0c",
    "k1b",
    "k2b",
    "k3b",
    "}",
    "{",
    "\\g0",
    "\\g1",
    "\\g2",
    "\\g3",
    "}",
]
lists = []
current_list = None

for atom in input_data:
    if atom == "{":
        assert current_list is None, "nested lists not supported"
        current_list = []
        lists.append(current_list)
    elif atom == "}":
        current_list.append(atom)
        current_list = None
        continue
    assert current_list is not None, (
        "attempting to add item when no list active: %s" % atom
    )
    current_list.append(atom)

for lst in lists:
    print(" ".join(lst))

Выход

{ k0c k1b k2b k3b }
{ \g0 \g1 \g2 \g3 }

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...