因此,我正在尝试编写一个代码来执行以下操作:
将多个列表添加到列表中。(含蛋白质序列;又名氨基酸)
计算每个序列中每个氨基酸(str)的数量(列表)
创建字典,将每个键(氨基酸)与特定值(分子量)关联
获得总分子量(乘以每个氨基酸的相关值)
求每个蛋白质序列的总值(列表)
问题是,;我可以得到每个字典的总和,但我不能求这些字典的最终值的总和。你知道解决这个问题的办法吗
# Add different list of protein sequences (proteinx) into a list of lists (proteins)
proteins=[]
protein1= ['ALA', 'VAL', 'GLY', 'GLU', 'ALA', 'ALA', 'GLY', 'PHE', 'VAL', 'TYR', 'THR', 'Y', 'A', 'W']
protein2= ['MET', 'K', 'F', 'G', 'N', 'F', 'L', 'LEU', 'T', 'Y', 'Q', 'P', 'P', 'E', 'L', 'SER', 'Q', 'T', 'A','W','CYS','C']
# Add different list of protein sequences (proteinx) into a list of lists (proteins)
proteins.append(protein1)
proteins.append(protein2)
# Count how many amino acids there are in each list (protein sequence)
for protein in proteins:
CAla=(protein.count('A') + protein.count('ALA'))
CArg=(protein.count('R') + protein.count('ARG'))
CAsn=(protein.count('N') + protein.count('ASN'))
CAsp=(protein.count('D') + protein.count('ASP'))
CCys=(protein.count('C') + protein.count('CYS'))
CGln=(protein.count('Q') + protein.count('GLN'))
CGlu=(protein.count('E') + protein.count('GLU'))
CGly=(protein.count('G') + protein.count('GLY'))
CHis=(protein.count('H') + protein.count('HIS'))
CIle=(protein.count('I') + protein.count('ILE'))
CLeu=(protein.count('L') + protein.count('LEU'))
CLys=(protein.count('K') + protein.count('LYS'))
CMet=(protein.count('M') + protein.count('MET'))
CPhe=(protein.count('F') + protein.count('PHE'))
CPro=(protein.count('P') + protein.count('PRO'))
CSer=(protein.count('S') + protein.count('SER'))
CThr=(protein.count('T') + protein.count('THR'))
CTrp=(protein.count('W') + protein.count('TRP'))
CTyr=(protein.count('Y') + protein.count('TYR'))
CVal=(protein.count('V') + protein.count('VAL'))
#Create a dictionary to associate each amino acid to its molecular weight and the number of each amino acid
AAmolma = {'Ala': [CAla * (89)], 'Arg': [CArg * (174)], 'Asn': [CAsn * (132)],
'Asp': [CAsp * (133)], 'Cys': [CCys * (121)], 'Gln': [CGln * (146)], 'Glu': [CGlu * (147)],
'His': [CHis * (155)], 'Ile': [CIle * (131)], 'Leu': [CLeu * (131)], 'Lys': [CLys * (146)],
'Met': [CMet * (149)], 'Phe': [CPhe * (165)], 'Pro': [CPro * (115)], 'Ser': [CSer * (105)],
'Thr': [CThr * (119)], 'Trp': [CTrp * (204)], 'Tyr': [CTyr * (181)], 'Val': [CVal * (117)],
'Gly': [CGly * (75)]}
#sum all the values in each dictionary and then the total value of each dictionary
parmw=0
for mw in AAmolma.values():
parmw+=sum(mw)
print(parmw)
totmw=0
for i in parmw:
totmw+=sum(parmw)
我得到的是:
1737
2953
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-145-43b4557ce807> in <module>
38
39 totmw=0
---> 40 for i in parmw:
41 totmw+=sum(parmw)
42
TypeError: 'int' object is not iterable
在这个特殊的例子中,我想做的就是求和1737+2953得到4690
您没有完全按照您提供的说明进行操作。对于步骤#3,您应该“创建一个字典,将每个键(氨基酸)与特定值(分子量)关联起来”,该字典看起来就像:
你把计数乘以,然后把它存入字典。这就违背了使用字典的意义。在使用
[CAla * (89)]
输入值时,您还创建了一个列表,但这里不需要列表。它是一个单条目列表,始终是一个单条目列表。这就是为什么您需要稍后使用sum(mw)
来获取值,而不仅仅是mw
下一个问题是,您将所有列表组合的计数累积到计数器中,例如
CAla
。你应该独立地为每个序列计数最后你应该“求每个蛋白质序列的总值(列表)”,因此对于你的例子,应该只有两个答案,因为你有两个序列
如果向上移动字典定义,则可以将for循环更改为
我还希望将被计数的项放入一些常量列表或元组中,比如
(('A', 'ALA', 'Ala'), ('R', 'ARG', 'Arg'), ..
,并对它们进行迭代,而不是所有这些重复的代码,但您可以将其作为第二步相关问题 更多 >
编程相关推荐