因此,我试图编写一个代码来做以下事情:
关联起来。
的总分子量(每一个氨基酸的个数乘以它的相关值)。
问题是,我可以得到每本字典的和,但我不能把这些字典的最终值和起来。你知道解决这个问题的方法吗?
# 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在这个特殊的例子中,我想要做的就是找出4772953来得到4690。
谢谢你!!希望有人能帮忙!!
发布于 2020-06-10 06:10:25
你没有完全按照你提供的指示行事。对于第3步,您应该“创建一个字典,将每个键(氨基酸)与一个特定的值(分子量)相关联”,该字典看起来就像:
AAmolma = {'Ala': 89, 'Arg': 174, .....你把数乘以,然后把它写进字典。这就违背了使用字典的意义。在使用[CAla * (89)]输入值时,您还创建了一个列表,但是这里不需要列表。它是一个条目列表,总是一个条目列表。这就是为什么以后需要使用sum(mw)来获取值,而不仅仅是mw。
下一个问题是,您在您的计数器(如CAla )中累计了所有列表的计数。你应该独立计算每一个序列。
最后,您应该“将每个蛋白质序列(列表)的总价值相加”,所以对于您的例子,应该有两个答案,因为您有两个序列。
如果将字典定义向上移动,则可以将for循环更改为如下所示
for protein in proteins:
total = (
(protein.count('A') + protein.count('ALA')) * AAmolma['Ala'] +
(protein.count('R') + protein.count('ARG')) * AAmolma['Arg'] +
....
)
print(total)我还希望将被计算到某些常量列表或元组中的项(如(('A', 'ALA', 'Ala'), ('R', 'ARG', 'Arg'), .. )进行迭代,而不是所有这些重复的代码,但您可以作为第二步进行。
发布于 2020-06-10 06:00:58
问题是,您试图迭代一个整数(注意,由于sum(parmw),第41行也会出现一个错误,一种解决方案是将totmw = 0放在for循环之外,然后在计算parmw之后将totmw = 0放在totmw += parmw之外。
https://stackoverflow.com/questions/62296308
复制相似问题