如何插入多层嵌套列表的中间?
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
接受任意数量的参数,然后像这样编写递归函数。
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))
输出
[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]))
输出:
[1, 2, [1, 2, 3, [1, 2, 3], 4, 5, 6], 3, 4]
我正在尝试创建一个程序,在另一个嵌套列表的中间插入一个列表。就像一个三明治夹着另一个三明治等等。我正在尝试递归地解决这个问题,但我不知道该怎么做。
例如
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
接受任意数量的参数,然后像这样编写递归函数。
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))
输出
[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]))
输出:
[1, 2, [1, 2, 3, [1, 2, 3], 4, 5, 6], 3, 4]