Объединение нескольких списков разной длины в списки списков

У меня есть список списков, например:

list1=[[1], [2], [3], [4], [5], [6]]

Мне нужно объединить списки длин, заданных другим списком, например:

list2=[1, 2, 3]

Окончательный результат должен быть таким: [[1], [2,3], [4,5,6]].

Как мне это сделать? Я использую Python 3.6.


person Karthik    schedule 22.06.2017    source источник
comment
Возможный ответ: stackoverflow.com/a/42693268/2148023   -  person Carles Mitjans    schedule 22.06.2017
comment
Что делать, если один из списков в исходном list1 содержит два или более элементов. Или это пустой список?   -  person Willem Van Onsem    schedule 22.06.2017
comment
В моем случае списки в list1 всегда состоят из одного элемента и никогда не бывают пустыми.   -  person Karthik    schedule 22.06.2017
comment
@CarlesMitjans Этот вопрос похож, но list1 в этом случае — это список, а не список списков.   -  person Karthik    schedule 22.06.2017


Ответы (1)


Вы можете попробовать использовать итератор для list1 в понимании списка поверх list2:

>>> list1=[[1], [2], [3], [4], [5], [6]]
>>> list2=[1, 2, 3]
>>> v = iter(list1)
>>> [sum((next(v) for _ in range(a)), []) for a in list2]
[[1], [2, 3], [4, 5, 6]]

v — это итератор над list1; next(v) просто возвращает следующий подсписок в списке. В понимании a принимает значения в list2, которые обозначают длины объединенных списков, которые мы хотим. sum(...) — это то, что на самом деле берет a подсписков (через range(a)) из list1 (через next(v)) и объединяет их в один список.

person arshajii    schedule 22.06.2017
comment
Благодарю вас! Это сработало. Небольшое объяснение кода было бы полезно. - person Karthik; 22.06.2017