我昨天开始遇到了一个小但棘手的问题。
我手头有一个(可能是无限)嵌套的列表,像这样:
[1,[2,[3,4]]]
or [[1,2],[3,4]] and so on.
每个层级中的列表都由两个子列表组成,(我没有使用元组,因为在下一步中列表可能会变得随意长度) 现在我想要在这个列表的每个可能位置插入一个元素,并返回所有可能插入位置的列表。 因此,如果我插入5,我的输出应该如下:
[ [5,[1,[2,[3,4]]]],
[1,[5,[2,[3,4]]]],
[1,[2,[5,[3,4]]]],
[1,[2,[[3,5],4]]],
[1,[2,[3,[4,5]]]] ]
背景:我正在尝试通过逐个添加分类单元来构建系统发育树。每个分类单元必须插入到最合适的位置。
现在我所拥有的是:
def get_trees(nwklist,newid):
if not isinstance(nwklist,list):
return [newid,nwklist]
else:
return [newid,nwklist],[get_trees(nwklist[0],newid),nwklist[1]],[nwklist[0],get_trees(nwklist[1],newid)]
这段代码并没有输出我想要的结果,但是接近我想要的结果。
([5, [1, [2, [3, 4]]]],
[[5, 1], [2, [3, 4]]],
[1, ([5, [2, [3, 4]]], [[5, 2], [3, 4]], [2, ([5, [3, 4]], [[5, 3], 4], [3, [5, 4]])])])
可能有一个简单的解决方案,也许涉及到lambda函数,但我看不出来。
Christoph