什么是追加列表的最佳方法?
并获取这样的列表;
A = [1,2,3,4,5]
并获取这样的列表;
B = [[1], [1, 2], [1,2,3], [1,2,3,4], [1,2,3,4,5]]
只需使用切片的列表推导式
B = [A[:i] for i in range(1, len(A) + 1)]
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]]
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]]
我认为最好的方法,也是最基本的方法,是使用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]
您在此描述的是某些函数式编程语言中所称的“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]]
itertools
:https://docs.python.org/3/library/itertools.html - Loïc