2016-09-19 68 views
-1

我想写歪斜基因组的功能,但不断收到错误:Python的倾斜基因组

Failed test #2. 
Test Dataset: AGCGTGCCGAAATATGCCGCCAGACCTGCTGCGGTGGCCTCGCCGACTTCACGGATGCCAAGTGCATAGAGGAAGCGAGCAAAGGTGGTTTCTTTCGCTTTATCCAGCGCGTTAACCACGTTCTGTGCCGACTTT 
Your output: ['0', '0'] 
Correct output: ['0', '0', '1', '0', '1', '1', '2', '1', '0', '1', '1', '1', '1', '1', '1', '1', '2', '1', '0', '1', '0', '-1', '-1', '0', '0', '-1', '-2', '-2', '-1', '-2', '-2', '-1', '-2', '-1', '0', '0', '1', '2', '1', '0', '0', '-1', '0', '-1', '-2', '-1', '-1', '-2', '-2', '-2', '-3', '-3', '-4', '-3', '-2', '-2', '-2', '-1', '-2', '-3', '-3', '-3', '-2', '-2', '-1', '-2', '-2', '-2', '-2', '-1', '-1', '0', '1', '1', '1', '2', '1', '2', '2', '3', '2', '2', '2', '2', '3', '4', '4', '5', '6', '6', '6', '6', '5', '5', '5', '5', '4', '5', '4', '4', '4', '4', '4', '4', '3', '2', '2', '3', '2', '3', '2', '3', '3', '3', '3', '3', '2', '1', '1', '0', '1', '1', '1', '0', '0', '1', '1', '2', '1', '0', '1', '1', '0', '0', '0', '0'] 

我的代码:

Genome = "CATGGGCATCGGCCATACGCC" 
def SymbolArray(Genome, symbol): 
    array = {} 
    n = len(Genome) 
    ExtendedGenome = Genome + Genome[0:n//2] 
    for i in range(n): 
     array[i] = PatternCount(symbol, ExtendedGenome[i:i+(n//2)]) 
    return array 
def Skew(Genome): 
    skew = {} 
    skew[0]=0 
    n = len(Genome) 
    for i in range(1, n+1):  
     skew[i] = skew[i-1] 
     if Genome[i-1] == "G": 
      skew[i] = skew[i-1]+1 
     elif Genome[i-1] == "C": 
      skew[i] = skew[i-1]-1 
     else: 
      skew[i] = skew[i-1] 
     return skew 
    for i in skew.items(): 
     Skew(Genome) 

回答

1

的问题是简单的比你正在做的。最大的问题似乎是:您的return声明在循环中而不是在循环之后;你正在使用一个你想要一个数组的字典;你的范围的结束是1;你有一个不必要的递归调用Skew()

这是你的代码的工作简化:

Genome = "AGCGTGCCGAAATATGCCGCCAGACCTGCTGCGGTGGCCTCGCCGACTTCACGGATGCCAAGTGCATAGAGGAAGCGAGCAAAGGTGGTTTCTTTCGCTTTATCCAGCGCGTTAACCACGTTCTGTGCCGACTTT" 

def Skew(genome): 
    skew = [0] 

    for i in range(1, len(genome)):  
     skew.append(skew[-1]) 

     if genome[i - 1] == "G": 
      skew[i] = skew[i - 1] + 1 
     elif genome[i - 1] == "C": 
      skew[i] = skew[i - 1] - 1 

    return skew 

print(Skew(Genome)) 

Can you also let me know can I use it in dictionary form?

如果你想在skew容器是一个字典,在你原来的,你可以做到以下几点:

def Skew(genome): 
    skew = {0:0} 

    for i in range(1, len(genome)): 

     if genome[i - 1] == "G": 
      skew[i] = skew[i - 1] + 1 
     elif genome[i - 1] == "C": 
      skew[i] = skew[i - 1] - 1 
     else: 
      skew[i] = skew[i - 1] 

    return [value for (key, value) in sorted(skew.items())] 

但我不推荐它。字典通常用于表示稀疏数组,但在这里不是这种情况。另一种实现方法是使用OrderedDict - 它可以让你避免列表理解,并简单地返回skew.values()

+0

谢谢我正在尝试学习没有预先知识的Python。你还可以让我知道我可以用字典形式吗?如果是,那么代码是什么? – Azia

+0

@Azia,我也添加了一个基于字典的解决方案。 – cdlane

+0

谢谢我,我做到了。我是这个论坛的新手,所以不知道这些事情:) – Azia

0
def Skew(Genome): 
    skew = {} 

    for base in range(1, len(Genome)+1): # since we start at 1 and not 0 as we should we are adding one to the length 

     if Genome[base - 1] == "G": # subtracting one since we start at one so base at the 0 position has to be included 
      skew[base] = skew[base - 1] + 1 
     elif Genome[base - 1] == "C": 
      skew[base] = skew[base - 1] - 1 
     else: 
      skew[base] = skew[base - 1] 


    return skew