Append кумулятивного списка списков питона

голоса
-6

Я пытаюсь расширить список списков в commulative образом, как это:

# 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]]

Поэтому в основном размер списка остается неизменным после расширения commulatively.

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

Вот то, что я изначально:

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]

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

Задан 27/11/2018 в 15:09
источник пользователем
На других языках...                            


4 ответов

голоса
4

Использование аккумулировать из 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]]
Ответил 27/11/2018 в 15:13
источник пользователем

голоса
2

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

>>> L =  [ [1], [2], [3], [4], [5], [6], [7] ]
>>> L_extend = [ sum(L[0:i+1], []) for i in range(len(L)) ]
Ответил 27/11/2018 в 15:23
источник пользователем

голоса
1

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

>>> 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]]
Ответил 27/11/2018 в 15:18
источник пользователем

голоса
1

Вы хотите накопленную сумму, только со списками. 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]]
Ответил 27/11/2018 в 15:16
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more