• 瀏覽: 10,645
  • 回覆: 37
[隱藏]

回覆 引用 TOP

熱賣及精選

回覆 引用 TOP

#cal protein mass from string



from collections import Counter


weight_lines = """
A   71.03711
C   103.00919
D   115.02694
E   129.04259
F   147.06841
G   57.02146
H   137.05891
I   113.08406
K   128.09496
L   113.08406
M   131.04049
N   114.04293
P   97.05276
Q   128.05858
R   156.10111
S   87.03203
T   101.04768
V   99.06841
W   186.07931
Y   163.06333 
"""
symbol_weights = [ line.split() for line in weight_lines.splitlines() if line ]



def cal_protein_mass(proteins: str) -> float:
    counter = Counter(list(proteins))
    total = sum([ float(s[1]) * counter[s[0]] for s in symbol_weights if (s[0] in counter) ])
    return total



total = cal_protein_mass('SKADYEK')    
print(total)
assert(821.392 == round(total, 3))



total = cal_protein_mass('')    
print(total)
assert(0.0 == round(total, 3))



回覆 引用 TOP

又玩吓先。

複製內容到剪貼板
代碼:
const s =
`A   71.03711
C   103.00919
D   115.02694
E   129.04259
F   147.06841
G   57.02146
H   137.05891
I   113.08406
K   128.09496
L   113.08406
M   131.04049
N   114.04293
P   97.05276
Q   128.05858
R   156.10111
S   87.03203
T   101.04768
V   99.06841
W   186.07931
Y   163.06333 `;
const p = `SKADYEK`;
let _s = {}, _p = {};
s.split('\n').forEach((v)=>{a=v.split(/\s+/);{_s[a[0]]=parseFloat(a[1])}});
(p.split('')).forEach((v)=>{_p[v]=(_p[v]||0)+1});
let p_mass = Object.keys(_p).reduce((t,i)=>t+_p[i]*_s[i],0);
console.log(p_mass.toFixed(3));


[ 本帖最後由 kormer 於 2019-12-26 11:09 AM 編輯 ]



回覆 引用 TOP

[隱藏]

回覆 引用 TOP

回覆 引用 TOP

回覆 引用 TOP

回覆 引用 TOP

回覆 引用 TOP

[隱藏]
提示: 作者被禁止或刪除 內容自動屏蔽

回覆 引用 TOP

回覆 引用 TOP

回覆 引用 TOP

謝分享...


回覆 引用 TOP

[隱藏]

回覆 引用 TOP

提示:支持鍵盤翻頁左 右
[按此隱藏 Google 建議的相符內容]