Способ разбить список на вложенные списки по заданным элементам в начале и конце

Имеется список:

lst = ['hello', 'foo', 'test', 'world', 'bar', 'idk']

Требуется разбить его на вложенный список с элементом «foo» в начале и «bar» в конце. В результате должно получиться:

lst = ['hello', ['foo', 'test', 'world', 'bar'], 'idk']

Один из творческих подходов к решению — преобразовать список в JSON-строку, добавить открытые и закрытые квадратные скобки, где это необходимо, и преобразовать JSON-строку обратно во вложенный Python-список.

import json
lst = ['hello', 'foo', 'test', 'world', 'bar', 'idk']
start_keywords = ['world', 'foo', 'test']
end_keywords = ['bar', 'idk', 'foo']
dump = json.dumps(lst)

for k in start_keywords:
    dump = dump.replace(f'"{k}"', f'["{k}"')

for k in end_keywords:
    dump = dump.replace(f'"{k}"', f'"{k}"]')

json.loads(dump)
# ['hello', ['foo'], ['test', ['world', 'bar'], 'idk']]
json.loads(dump)[2][1][0]
# 'world'

Преимущество использования описанного способа состоит в том, что список легко отслеживать, решение отлично работает для списков с произвольной вложенностью и предусматривает проверку структуры на целостность. Однако нужно иметь в виду, что исходные слова не должны содержать знак ".


По материалам Eric Duminil.