Со вчерашнего дня я застрял в небольшой, но хитрой проблеме.
У меня есть (возможно, бесконечно) вложенный список, подобный этому:
[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]])])])
Должно быть простое решение, возможно, с использованием лямбда-функций, но я его просто не вижу.
Кристоф