[英]How can I insert in the middle of a multilayered nested list?
我正在嘗試創建一個在另一個嵌套列表中間插入列表的程序。 就像一個三明治夾着另一個三明治等等。 我正在嘗試以遞歸方式解決此問題,但我不知道如何。
例如
layer1 = [1,2,3,4]
layer2 = [1,2,3,4,5,6]
layer3 = [1,2,3]
output = [1,2,[1,2,3,[1,2,3],4,5,6],3,4]
這是我的上下文代碼
def lasagna(N,i):
mainLayers = formLayer(i)
midpoint = len(mainLayers) // 2
if i == N:
return mainLayers
elif i < N:
mainLayers = mainLayers.insert(midpoint, formLayer(i))
return lasagna(N,i+1)
您可以使用*args
接受任意數量的 arguments ,然后像這樣編寫遞歸 function 。
layer1 = [1,2,3,4]
layer2 = [1,2,3,4,5,6]
layer3 = [1,2,3]
layer4 = [1,2,3,4,5,6,7,8]
layer5 = [1,2,3,4]
def sandwhich(*seq):
res = []
if len(seq) == 1:
return seq[0]
res.extend(seq[0])
res.insert(len(res) // 2, sandwhich(*seq[1:]))
return res
output = [1,2,[1,2,3,[1,2,3],4,5,6],3,4]
print(sandwhich(layer1, layer2, layer3))
print(sandwhich(layer1, layer2, layer3, layer4, layer5))
Output
[1, 2, [1, 2, 3, [1, 2, 3], 4, 5, 6], 3, 4]
[1, 2, [1, 2, 3, [1, [1, 2, 3, 4, [1, 2, 3, 4], 5, 6, 7, 8], 2, 3], 4, 5, 6], 3, 4]
略短的遞歸解決方案:
layer1 = [1,2,3,4]
layer2 = [1,2,3,4,5,6]
layer3 = [1,2,3]
def nest(vals):
a, *b = vals
return a[:len(a)//2]+([] if not b else [nest(b)]) + a[len(a)//2:]
print(nest([layer1, layer2, layer3]))
Output:
[1, 2, [1, 2, 3, [1, 2, 3], 4, 5, 6], 3, 4]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.