簡體   English   中英

如何在多層嵌套列表的中間插入?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM