什麼是追加的從列表中生成多個列表
A = [1,2,3,4,5]
列表,並獲得這種列表的最佳方式;
B = [[1], [1, 2], [1,2,3], [1,2,3,4], [1,2,3,4,5]]
什麼是追加的從列表中生成多個列表
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 = []
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]]
也許我太快了,不好意思。正如你所說,對我來說,這個解決方案不是pythonic,然後不是'正確'(對我來說),即使是有效的。我認爲每種語言都有其「風格」,然後我們的責任就是儘量保留它。說這個,我不是'專家',也不是專家 – horro
而且避免與指數打太多另一個列表理解。
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]]
我認爲最好的方法和最基本的方法是使用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]]
該appraoch的優點是它可以與無限生成器一起使用,也可以與枚舉集合一起使用,但不支持切片。此外,內存在不同的islice
之間共享,因此我們不會構造顯式列表,除非我們明確需要(如上例所示)。
你有什麼嘗試過自己? –
如果你想要所有可能的組合,你應該看看'itertools':https://docs.python.org/3/library/itertools.html –
@Loïc:不,他想要所有可能的inits。 –