我们如何使用递归来计算函数中所有长度为n的dna序列。
例如,如果给定功能2,则返回['AA','AC','AT','AG','CA','CC','CT','CG','TA' ,“ TC”,“ TT”,“ TG”,“ GA”,“ GC”,“ GT”,“ GG”]
等...
答案 0 :(得分:2)
functools.permutations
将给出给定迭代的所有组合,第二个参数r
是返回的组合的长度
itertools.permutations('ACGT', length)
答案 1 :(得分:0)
这是一种方法:
def all_seq(n, curr, e, ways):
"""All possible sequences of size n given elements e.
ARGS
n: size of sequence
curr: a list used for constructing sequences
e: the list of possible elements (could have been a global list instead)
ways: the final list of sequences
"""
if len(curr) == n:
ways.append(''.join(curr))
return
for element in e:
all_seq(n, list(curr) + [element], e, ways)
perms = []
all_seq(2, [], ['A', 'C', 'T', 'G'], perms)
print(perms)
输出:
['AA', 'AC', 'AT', 'AG', 'CA', 'CC', 'CT', 'CG', 'TA', 'TC', 'TT', 'TG', 'GA', 'GC', 'GT', 'GG']
答案 2 :(得分:0)
您实际上想要itertools.product('ACGT', repeat=n)
。请注意,这将快速增长(长度为4^n
的{{1}}个元素。
如果您的任务是递归执行,请考虑如何获取以n长度前缀开头的所有n + 1长度选项。如果您在愤怒时需要使用它,那么与itertools相比,朴素的递归选项可能会比较慢。