2014-10-17 106 views
0

所以,我正在研究一個生物信息學課程問題 - 現在已經設置好了,並且陷入了一個算法中。如何獲得與字典中最小值關聯的密鑰?

我的問題是,我似乎無法找到一種方法來使最後的功能(SkewMin)工作,因爲它應該只返回Skew最小化的位置。

是的,我知道索引從0開始,但我會在minimumValues加1的每一個值進行調整,所以用它去:)

# Example: 
# index   : 1 2 3 4 5 6 7 8 9 10 11 12 13 
# Genome   => A T T C G G C C C G G C C 
# Skew(genome) => 0 0 0 0 -1 0 +1 0 -1 -2 -1 0 -1 -2 
# MinSkew(genome) =>      9   13 

下面是實際的代碼(我刪除代碼對於Skew,因爲它上面完全說明什麼我,和我不能在網上發佈工作的代碼,這也是爲什麼我不打算提課程名稱):

# MinSkew, uses Skew(genome) to find the positions where Skew is at a minimum. 

#EX: Skew("ACGTGCC") gives 0 0 -1 0 0 1 0 -1 
#    with index 0 1 2 3 4 5 6 7 
#and MinSkew("ACGTGC") gives the index of the nucletides scoring -1 in genome 
#     result: (2,7). 

def MinSkew(genome): 

    dictOfSkew = dict() 
    skewValues = Skew(genome) 
    minimumSkew = 0 
    minimumValues = list() 

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

     dictOfSkew[i] = skewValues[i] 
     if minimumSkew > skewValues[i]: 
      minimumSkew = skewValues[i] 
      minimumValues.append(i) 

    return minimumValues 
+0

'SkewMin'和'MinSkew'如何關聯? – 2014-10-17 17:09:09

+0

'Skew()'返回一個'list'或者'dict'嗎? – 2014-10-17 17:19:18

+0

Skew()返回一個列表,而SkewMin,MinSkew部分只是一個錯誤,對此抱歉! – 2014-10-18 10:37:47

回答

2

你的核心錯誤是,你永遠清楚minimumValues當你發現一個新的分鐘時,所以前一分鐘的值仍然在。 BartoszKP的答案是好的,但要一次完成:

if minimumSkew > skewValues[i]: 
     minimumSkew = skewValues[i] 
     minimumValues = [i] 
    elif minimumSkew == skewValues[i]: 
     minimumValues.append(i) 
+0

有趣的是,我確實注意到了這個錯誤,儘管我在解決問題時遇到了一些問題。 感謝您的幫助! – 2014-10-18 10:45:29

+0

完美地工作,謝謝! – 2014-10-18 11:04:45

2

的算法當前表單將不起作用,因爲過濾(僅查找最小值)並且計算用於過濾的標準(最小值)被交錯。這個簡單的解決辦法是,首先找到最低:

minimumValue = min(skewValues.values()) 

,然後才應用過濾:

minimumKeys = [k for (k,v) in skewValues.items() if v == minimumValue] 

(或iteritems爲Python 2)

+0

非常感謝! 今天早上花了一些時間仔細閱讀代碼,並找到了一種使它像你一樣工作的方式,除了我沒有使用列表生成器的經驗(我認爲這就是它的名字?),所以我花了一秒鐘for循環。 雖然你的解決方案更優雅! – 2014-10-18 10:42:51

+0

檢查出來,結果你意外地將dictOfSkew換成skewValues。 我在考慮更新Skew()來給出一個預先製作的字典,它給了我1個位置+值... – 2014-10-18 10:59:17

+0

@PeterBock當然,歡呼!它叫做* list comprehension * btw。 :) – BartoszKP 2014-10-18 12:06:00

相關問題