我有一个Python代码,可以根据您输入的亲生父母的两种基因型为后代生成基因型。 以下代码可以正常运行:http://freetexthost.com/tutjzff4ai
您输入了两种基因型(例如“EE aa”和“ee AA”,它输出“Ee Aa”。您还可以输入其他基因,但这并不重要,因为该部分可以正常工作。
目前有两种必需的基因类型(延伸和刺豚鼠)。
我需要它有第三种类型。我需要有第三种类型的“奶油”。我需要这个的原因是因为目前“Cr”和“prl”(当前在订单列表中)需要单独输入(nCr nprl),而它们实际上应该作为Crprl输入。 Cr和prl基因位于同一基因座上,因此当父母同时具有Cr和prl(Crpr1)时,它需要总是通过其中一个。如果你将它们分别作为nCr nprl输入,那么后代就不会同时接收它们,或者两者都没有,因为代码将它们作为两个不同的基因座读取。
列表应如下所示
cream = [“Cr”,“prl”]
可能的输入应该是nCr,CrCr,nprl,prlprl和Crprl
这是我到目前为止所做的,但它不起作用。 http://freetexthost.com/6160o0mk3e
答案 0 :(得分:0)
我建议查看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']
定义值得查看Itertools Recipes。