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

2024-10-02 18:20:00 发布

您现在位置:Python中文网/ 问答频道 /正文

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

你输入两个基因型(例如“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

这是我到目前为止,它不工作。 http://freetexthost.com/6160o0mk3e


Tags: 代码comhttp列表基因eeaacr
1条回答
网友
1楼 · 发布于 2024-10-02 18:20:00

我建议看一下itertools模块。 这才是你真正需要的。像这样使用:

>>> 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'))。然后将有效的组合作为带有''.join(x)的字符串连接起来,并返回此类字符串的列表。你知道吗

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

绝对值得一看。你知道吗

相关问题 更多 >