Python-项目不在列表中(但它是) - 复制列表

时间:2014-11-06 23:47:32

标签: python

我正在开发一种算法,该算法使用肽的排行榜并去除没有特定“分数”的肽。我目前正在努力理解为什么我的删除过程中出现错误。我相信可能与我复制列表有关,然后我会在删除过程中使用它。但是,我在以前的问题中使用了相同的过程,没有问题,所以我不明白为什么这个特定的实例会抛出错误。

def Trim(Leaderboard,Spectra,N):
     Scores=[];droplist=[]
     for peptide in Leaderboard:
         Scores.append(LinearScore(peptide,Spectra))
     Leaderboard,Scores = zip(*sorted(zip(Leaderboard, Scores),key=lambda peptide: peptide[1], reverse=True))
     Leaderboard=list(Leaderboard);Scores=list(Scores) ### IS THIS WHERE THE PROBLEM IS????
     Cutoffscore=Scores[N-1] # Here I am finding the Score of the Nth' peptide (in sorted order)
     for peptide,score in zip(Leaderboard,Scores): # iterate through list of tuples
         if score<Cutoffscore: # if peptide score is lower than cut off score
             droplist.append(peptide) # remove that peptide from the leaderboard
     for i in droplist:
        Leaderboard.remove(i) ### ERROR THROWN HERE "Error list.remove(x), x not in list"
     return Leaderboard # then return what's left of the list

编辑:问题位于程序的其他位置

1 个答案:

答案 0 :(得分:1)

new_list = [peptide for peptide,score in zip(Leaderboard,Scores) if score >= CutoffScore]

是一种更好的方法来实现这一点......说你应该向后遍历droplist

for i in reversed(droplist):
    Leaderboard.remove(i)

问题在于

考虑分数为[1,5,5,5,5,5,1]的情况......您的下拉列表中的索引为[0, 6]

然而,一旦你弹出0 ...没有索引6 ...你的其他索引已经转移到5