创建长度为n的DNA序列

时间:2019-08-04 04:51:18

标签: python permutation

我们如何使用递归来计算函数中所有长度为n的dna序列。

例如,如果给定功能2,则返回['AA','AC','AT','AG','CA','CC','CT','CG','TA' ,“ TC”,“ TT”,“ TG”,“ GA”,“ GC”,“ GT”,“ GG”]

等...

3 个答案:

答案 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相比,朴素的递归选项可能会比较慢。