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

标签 python algorithm recursion

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

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

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,但没有一个选项有效。当我更改 yield 或 return 的打印时,该函数返回 None。

这可能是一个概念错误,我只是出于生物学背景而理解递归函数。

提前致谢。

最佳答案

诀窍是在递归调用中使用 yield from(需要 Python 3.3+):

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

测试:

>>> [x for x in function(2)]
['AA', 'CA', 'TA', 'GA', 'AC', 'CC', 'TC', 'GC', 'AT', 'CT', 'TT', 'GT', 'AG', 'CG', 'TG', 'GG']

关于python - 使用递归从 python 中的单体列表生成 k-mers,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35386119/

相关文章:

python - Kivy 高斯模糊

java - 保存基于节点的链表的起点

java - 如何有效地监控远程位置的变化?

java - 在Java中查找集合组合的递归算法

java - 递归树绘制何时返回?

python - 剥离 numpy 数组中的空格

Python 日志记录 - 每个循环迭代的新日志文件

c# - 这个排序算法有名字吗?

haskell - 自动将功能应用于子结构

python - 如何在递归函数中控制函数调用的次数。即递归函数调用自身的次数