使用递归从python中的单体列表生成k-mers

时间:2016-02-13 22:31:20

标签: python algorithm recursion

我正在尝试构建一个函数,该函数从一个字母列表(DNA碱基)返回或产生一个k-mers列表。 K表示k聚体的长度(或顺序)。

我已经制作了这个功能,可以将所需的结果打印到屏幕上。关键是我不能让函数返回那些值。

def function(k,y=''):
    letters=['A','C','T','G']
    if k==0:
        print(y)
    else:
        for m in letters:
            kmer=m+y
            function(k-1,kmer)

我在返回列表或产生k-mers时却没有选择。当我更改print的yield或return时,函数返回None。

这可能是一个概念错误,我只是理解递归函数,因为我来自生物背景。

提前致谢。

2 个答案:

答案 0 :(得分:2)

诀窍是在递归调用中使用yyyy-MM-dd(需要Python 3.3 +):

yield from

测试:

def function(k, y=''):
    if k==0:
        yield y
    else:
        for m in ['A','C','T','G']:
            yield from function(k-1, m+y)

答案 1 :(得分:0)

人们已经展示了如何使用屈服,我将展示如何将所有kmers归结在一起(如果k太高而且可能会有太多,可能会不合需要)

def giveKmers(k):
    def function(k, y=''):
        letters = ['A', 'C', 'T', 'G']
        if k:
            for m in letters:
                function(k - 1, m + y)
        else:
            arr.append(y)

    arr = []
    function(k)
    return arr


print giveKmers(2)