Добавить совокупный список списков Python - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь расширить список списков следующим образом:

# Consider the following list of lists
l_Of_l = [ [1], [2], [3], [4], [5], [6], [7]]

Желаемый результат:

l_extended = [ [1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7]]

Таким образом, размер списка остаетсято же самое после продолжительного расширения.

Редактировать:

Вот что я сделал изначально:

l_Of_l = [ [1], [2], [3], [4], [5], [6], [7]]
lista = []
for i in l_Of_l:
    lista.extend(i)
    print(list([i for i in lista]))

Но затем результат был:

[1]
[1, 2]
[1, 2, 3]
[1, 2, 3, 4]
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 4, 5, 6, 7]

Кто-нибудь знает, как этого добиться правильным образом?

Ответы [ 4 ]

0 голосов
/ 27 ноября 2018

Один из способов сделать это без itertools - использовать функцию Python sum для объединения списков.

>>> L =  [ [1], [2], [3], [4], [5], [6], [7] ]
>>> L_extend = [ sum(L[0:i+1], []) for i in range(len(L)) ]
0 голосов
/ 27 ноября 2018

Вы хотите накопительную сумму, только со списками.itertools.accumulate может сделать это.

>>> from itertools import accumulate
>>> lst = [[1], [2], [3], [4], [5], [6], [7]]
>>> list(accumulate(lst))
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7]]
0 голосов
/ 27 ноября 2018

Вы также можете создать простое понимание списка:

>>> from operator import itemgetter
>>> l_Of_l = [[1], [2], [3], [4], [5], [6], [7]]
>>> [list(map(itemgetter(0), l_Of_l[:i+1])) for i in range(len(l_Of_l))]
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5, 6], [1, 2, 3, 4, 5, 6, 7]]
0 голосов
/ 27 ноября 2018

Использование накопления от itertools:

list(itertools.accumulate(l_Of_l))                                                                                              
Out: 
[[1],
 [1, 2],
 [1, 2, 3],
 [1, 2, 3, 4],
 [1, 2, 3, 4, 5],
 [1, 2, 3, 4, 5, 6],
 [1, 2, 3, 4, 5, 6, 7]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...