我正在尝试构建一个函数,该函数从一个字母列表(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。
这可能是一个概念错误,我只是理解递归函数,因为我来自生物背景。
提前致谢。
答案 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)