Python倾斜基因组

Python倾斜基因组,python,dictionary,skew,Python,Dictionary,Skew,我试图编写歪斜基因组函数,但不断出错: Failed test #2. Test Dataset: AGCGTGCCGAAATATGCCGCCAGACCTGCTGCGGTGGCCTCGCCGACTTCACGGATGCCAAGTGCATAGAGGAAGCGAGCAAAGGTGGTTTCTTTCGCTTTATCCAGCGCGTTAACCACGTTCTGTGCCGACTTT Your output: ['0', '0'] Correct output: ['0', '0', '1', '0', '1'

我试图编写歪斜基因组函数,但不断出错:

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)

问题比你想的要简单。最大的问题似乎是:您的
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))
你能让我知道我能用字典的形式吗

如果希望将
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()

谢谢您,我正在尝试学习Python,之前没有任何知识。你能让我知道我能用字典的形式吗?如果是,那么代码是什么?@Azia,我还添加了一个基于词典的解决方案。谢谢,我做到了。我是这个论坛的新手,所以不知道这些事情:)
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