如果给出一个外群,我如何为一组物种生成所有可能的Newick树排列?
对于那些不知道Newick树格式的人,可以在以下网址找到一个很好的描述:https: //en.wikipedia.org/wiki/Newick_format
我想在给出一个外群的情况下为一组物种创建所有可能的Newick树排列.我期望处理的叶节点的数量很可能是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"设置为outgroup
理想输出:
((("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"));
Run Code Online (Sandbox Code Playgroud)
但是,我使用itertools带来的任何可能的解决方案,特别是itertools.permutations,都遇到了等效输出的问题.我想出的最后一个想法涉及下面显示的等效输出.
等效输出:
((("C","B","A"),("D"),("E"));
((("C","A","B"),("D"),("E"));
((("A","C","B"),("D"),("E"));
Run Code Online (Sandbox Code Playgroud)
这是我的解决方案的开始.但是,除了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")
Run Code Online (Sandbox Code Playgroud)