附加
列表的最佳方法是什么A = [1,2,3,4,5]
并获取此类列表;
B = [[1], [1, 2], [1,2,3], [1,2,3,4], [1,2,3,4,5]]
答案 0 :(得分:9)
只需使用切片列表理解
B = [A[:i] for i in range(1, len(A) + 1)]
答案 1 :(得分:4)
另一个列表理解,避免过多地使用索引。
A = [1,2,3,4,5]
B = [A[:i+1] for i, _ in enumerate(A)]
print(B) # [[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]
答案 2 :(得分:3)
A = [1,2,3,4,5]
B = []
for x in range(1,len(A)+1):
B.append(list(A[0:x]))
print(B)
输出:
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]
答案 3 :(得分:3)
我认为最好的方法和最基本的方法是使用List Comprehensions
!
A = [1,2,3,4,5]
B = [A[:i+1] for i in range(len(A))]
print B
输出:
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]
顺便说一下你上面给出的例子,即使这样也可以:
B = [A[:i] for i in A]
答案 4 :(得分:2)
您在此处描述的是某些函数式编程语言中的inits
。
我们可以构造一个inits
函数,该函数适用于无限生成器和延迟加载,如下所示:
from itertools import islice
def inits(xs):
ls = []
for i,x in enumerate(xs,1):
ls.append(x)
yield islice(ls,i)
对于您的情况,我们可以执行map(list,...)
并对结果执行list(..)
:
>>> list(map(list,inits(A)))
[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]
这个appraoch的优点是它可以与无限生成器一起使用,也可以与可以枚举的集合一起使用,但不支持切片。此外,内存在不同的islice
之间共享,因此我们不构造显式列表,除非我们明确地想要这样(如上例所示)。