我试图自己解决另一个 Rosalind( http://rosalind.info/problems/lexv/ ) 问题,但不幸的是我不得不向你寻求帮助。
这是我的方法:
首先; 创建长度为 n 的输入字符串的所有可能子字符串的函数:
def get_substrings(input_string, l):
res_list = []
sub = []
for i in range(len(input_string)):
if l+i <= len(input_string):
for j in range(i,l+i):
sub.append(input_string[j])
sub = ''.join(sub)
res_list.append(sub)
sub = []
res_list = filter(None, res_list)
return res_list
然后是创建具有不同长度的当前字符串的所有组合的主函数:
from itertools import product
def lexv():
dna = str(raw_input())
n = int(raw_input())
subs = get_substrings(dna, n)
result = []
for i in range(len(subs)):
for j in range(1,n+1):
result = result + list(product(dna, repeat=j))
for i in range(len(result)):
result[i] = "".join(result[i])
print result[i]
我对来自 Rosalind 的“示例输入”的数据的代码的结果是:
D
N
A
DD
DN
DA
ND
NN
NA
AD
AN
AA
DDD
DDN
DDA
DND
DNN
DNA
DAD
DAN
DAA
NDD
NDN
NDA
NND
NNN
NNA
NAD
NAN
NAA
ADD
ADN
ADA
AND
ANN
ANA
AAD
AAN
AAA
我的问题:
a) 是否可以按原样订购我的结果(Rosalind 的结果)?
b) 我的方法正确吗?如果没有,你能给我一些线索(但不是这个问题的解决方案——我想自己解决)。
很感谢!