, Я не уверен почему.

не сгенерировать все возможные перестановки дерева Ньюика для набора видов, данного внешней группе?

Для тех, кто не знает, что такое формат дерева Ньюика, хорошее описание доступно по адресу:https://en.wikipedia.org/wiki/Newick_format

Я хочу создать все возможные перестановки дерева Ньюика для набора видов, данного внешней группе. Число листовых узлов, которые я ожидаю обработать, скорее всего, 4, 5 или 6 листовых узлов.

Допускаются как «мягкие», так и «жесткие» политомии.https://en.wikipedia.org/wiki/Polytomy#Soft_polytomies_vs._hard_polytomies https://biology.stackexchange.com/questions/23667/evidence-discussions-of-hard-polytomy

Ниже показан идеальный выход, с «E», установленным как внешняя группа.

Идеальный результат:

((("A","B","C"),("D"),("E"));
((("A","B","D"),("C"),("E"));
((("A","C","D"),("B"),("E"));
((("B","C","D"),("A"),("E"));
((("A","B")("C","D"),("E"));
((("A","C")("B","D"),("E"));
((("B","C")("A","D"),("E"));
(("A","B","C","D"),("E"));
(((("A","B"),"C"),"D"),("E"));

Однако любые возможные решения с использованием itertools, в частности itertools.permutations, сталкивались с проблемой эквивалентного вывода. Последняя идея, с которой я столкнулся, заключалась в эквивалентном выводе, показанном ниже.

Эквивалентная продукция:

((("C","B","A"),("D"),("E"));
((("C","A","B"),("D"),("E"));
((("A","C","B"),("D"),("E"));

Вот начало моей идеи для решения. Тем не менее, я не совсем уверен, что об этой проблеме, кроме itertools на данный момент.

import itertools

def Newick_Permutation_Generator(list_of_species, name_of_outgroup)
    permutations_list =(list(itertools.permutations(["A","B","C","D","E"])))

    for given_permutation in permutations_list:
        process(given_permutation)

Newick_Permutation_Generator(["A","B","C","D","E"], "E")

Ответы на вопрос(2)

Ваш ответ на вопрос