追加列表的累积列表python

i7uaboj4  于 2023-01-29  发布在  Python
关注(0)|答案(5)|浏览(133)

我尝试用如下交换的方式扩展一个列表的列表:

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

有人知道如何以正确的方式实现这一点吗?

xwmevbvl

xwmevbvl1#

使用来自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]]
fjnneemd

fjnneemd2#

一种不用itertools的方法是使用Python的sum函数来连接列表。

>>> L =  [ [1], [2], [3], [4], [5], [6], [7] ]
>>> L_extend = [ sum(L[0:i+1], []) for i in range(len(L)) ]
fnatzsnv

fnatzsnv3#

您需要一个累积和,只需要列表。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]]
mwngjboj

mwngjboj4#

你也可以创建一个简单的列表解析:

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

w8ntj3qf5#

lol =  [ [1], [2], [3], [4], [5], [6], [7] ]
 lol_test = [[*range(1, i+2)]for i in range(len(lol))]
 print(lol_test)

我想出了一个类似于Bill M的解决方案,只是有一点小区别,我只是一个学习Python的新手。
它的输出是一样的:[[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]]

相关问题