python中的部分摘要问题(PDP)仅吐出“无”

时间:2018-10-08 08:01:06

标签: python bioinformatics

部分文摘问题是获得DNA剪切位置的算法之一。给定所有可能的切割长度,例如[2,2,3,3,4,5,6,7,8,10],我必须找出一种方法来找到实际的切割位置。在此示例中,DNA的总长度为10,实际切割的位置为[0,3,6,8,10]。

an introduction to bioinformatics algorithms

根据上面的算法,我试图在python中构建实际的代码,并且我不确定自己做错了什么。 此代码的期望输出是 [0,3,6,8,10] 我只会在哪里 “没有” 谁能告诉我代码中的哪一部分不正确?

# function to remove multiple elements given as list
def delete(elements,A): 
    for el in elements:
        A.remove(el)
    return A

# y is given as integer, X as list
def delta(y,X): 
    n = len(X)
    for i in range(n):
        X[i] -= y
        X[i] = abs(X[i])
    return sorted(X)

# If former contains latter, return true. Else, return false
def contains(small, big):
    for i in range(len(big)-len(small)+1):
        for j in range(len(small)):
            if big[i+j] != small[j]:
                break
        else:
            return True
    return False

def partialDigest(L):
    global width
    width = (max(L)) 
    delete([width], L) # Needs to be in list to feed to 'delete' function
    X = [0, width]
    X = place(L,X)
    return X


def place(L,X):
    if len(L) == 0: # Baseline condition
        return X
    y = max(L)

    if contains(delta(y,X),L): # If former is the subset of L
        delete(delta(y,X), L)  # Remove lengths from L
        X += list(y) # assert that this y is one of the fixed points, X
        X = sorted(X) # To maintain order
        print(X)

        place(L,X) # Recursive call of the function to redo the upper part
                       # If none of the if statements match the condition, continue

        X.remove(y) # If the code reaches down here, it means the assumption that
                        # y is one of the points is wrong. Thus undo
        L += delta(y,X) # undo L
        L = sorted(L)   # To maintain order

    # Do the same thing except this time it's (width-y)
    elif contains(delta(width-y,X),L): 
        delete(delta(width-y,X), L)
        X += list(width - y) 
        X = sorted(X) 

        place(L,X) 

        X.remove(width-y) 

        L += delta(y,X) 
        L = sorted(L)


L = [2,2,3,3,4,5,6,7,8,10]
X = partialDigest(L)
print(X)

0 个答案:

没有答案