У меня есть два списка:
data = [[1,2,3,4], [5,6,7], [8,9,10,11,12,13,14]]
splitters = [3,7,10,13]
Я хочу разделить вложенные списки в data на значения в splitter со следующими условиями:
- Не разбивать, если это первое / последнее значение в списке.
- Значение разделения в разделителе должно быть в конце и в начале новых списков.
- Должно быть как-то итеративно, поэтому списки разделяются какв списке много частей как разделителей.
- Нет избыточности.
Окончательный результат должен выглядеть примерно так:
results = [[1,2,3],[3,4],[5,6,7],[8,9,10],[10,11,12,13],[13,14]
Моя первая попытка выглядит следующим образом:
temp = []
for route in data:
for node in route:
if node in splitter and ((route.index(node) !=0) and (route.index(node) != (len(route)-1))):
#route should be splitted and save it for now with the splitter
temp.append([route, node])
#here a big part is missing
#start a new subroute
#maybe something like a whileloop with len(route)
#check the same if-statement for the remaining subroute
else:
#no splitter in this route, so keep the original route
temp.append([route, 0])
temp выглядит так:
[[[1, 2, 3, 4], 0],
[[1, 2, 3, 4], 0],
[[1, 2, 3, 4], 3],
[[1, 2, 3, 4], 0],...]
Исходя из этого, я могу удалить избыточные маршруты и разбить маршрут, но я думаю, что мой подход излишне сложен, и он становится все более и более сложным.Еще больше сбивает с толку, если я хочу реализовать что-то для удовлетворения других условий.
Мое исследование пока не было успешным (с использованием itertools.groupby и т. д.).Это как бы связано: https://www.reddit.com/r/learnpython/comments/3sk1xj/splitting_a_list_in_sublists_by_values/
Буду признателен за некоторые идеи / подходы, как решить эту проблему или поделить ее на более мелкие части.
Редактировать для будущих читателей: Я предпочитаю решение от maxiotic, потому что оно работает даже с такими данными, как
data = [[1,2,3],[1,2,3,4,5,6,7]]
splitters = [1,2,3,4,7]
, где каждый начало / конец вложенных списков находится в разделителях.Проблема в решении от Relondom заключается в следующем, если утверждение и должно быть изменено:
if inner[0] in splitters or inner[-1] in splitters: # check if first or last elemtn in splitters
Большое спасибо!