Python 如何在单独的列表中对某些项目进行分组?

Python 如何在单独的列表中对某些项目进行分组?,python,Python,我有一个Python代码,根据您输入的亲生父母的两个基因型,为后代生成一个基因型。 下面是它应该运行的代码: 你输入两种基因型(例如“EE aa”和“EE aa”,它输出“EE aa”。你也可以输入其他基因,但这并不相关,因为该部分按它应该的方式工作 目前它有两种必需的基因类型(扩展型和刺鼠型) 我需要第三种类型。我需要第三种类型,即“奶油”。我需要它的原因是,目前“Cr”和“prl”(目前在订单列表中)需要单独输入(nCr nprl)当它们实际上应该作为Crprl输入时。Cr和prl基因位于同

我有一个Python代码,根据您输入的亲生父母的两个基因型,为后代生成一个基因型。 下面是它应该运行的代码:

你输入两种基因型(例如“EE aa”和“EE aa”,它输出“EE aa”。你也可以输入其他基因,但这并不相关,因为该部分按它应该的方式工作

目前它有两种必需的基因类型(扩展型和刺鼠型)

我需要第三种类型。我需要第三种类型,即“奶油”。我需要它的原因是,目前“Cr”和“prl”(目前在订单列表中)需要单独输入(nCr nprl)当它们实际上应该作为Crprl输入时。Cr和prl基因位于同一个基因座上,因此当父母同时具有Cr和prl(Crprl)时,它需要始终通过其中一个。如果将它们作为nCr nprl单独输入,则子代很可能既不接收,也不接收两者,因为代码将它们读取为两个不同的基因座

列表应该如下所示

奶油=[“Cr”,“prl”]

可能的输入应为nCr、CrCr、nprl、prlprl和Crprl

这是我到目前为止所做的,它不起作用。 我建议看一下模块。 这真的是你需要的东西。像这样使用它:

>>> import itertools
>>> cream = ["Cr","prl"]

>>> list(itertools.combinations(cream+["n"], 2))
[('Cr', 'prl'), ('Cr', 'n'), ('prl', 'n')]

>>> list(itertools.combinations_with_replacement(cream+["n"], 2))
[('Cr', 'Cr'), ('Cr', 'prl'), ('Cr', 'n'), ('prl', 'prl'), ('prl', 'n'), ('n', 'n')]
对于不同的组合运算,有一个非常好的方法集。 如何迭代组合并轻松检查条件:

>>> for pair in itertools.combinations_with_replacement(cream+["n"], 2):
        print(pair)
        if ('Cr' in pair) or ('prl' in pair):
           print('Parent has on of them, so we have to ...')
        if ('Cr' in pair) and ('prl' in pair):
            print('Parent has both of them')
如何创建合并值列表并忽略不可能的值('nn')?这种所谓的“列表理解”迭代所有组合,检查任何特定组合是否有效(
x!=('n','n')
)。然后将有效组合作为字符串与
''进行连接。连接(x)
并返回此类字符串的列表

 >>> [''.join(x) 
        for x in itertools.combinations_with_replacement(cream+["n"], 2) 
        if x != ('n', 'n')
     ]
['CrCr', 'Crprl', 'Crn', 'prlprl', 'prln']

确实值得一看。

在问题中加上a,注意不要像你的最后一行这样喋喋不休的内容。看。嗨,谢谢你的回答!你能澄清一下我最好如何在我的代码中实现这一点吗?有了这个配方,你可以轻松地组合基因。我已经更新了它。你可以迭代不同的组合并检查条件s哪些基因应该添加或不添加。由于缩进不足,目前我无法理解您的程序。您能否将其放置在此处(或处),并对其格式进行注释?很抱歉!此处: