将蛋白质序列的权重与正确的序列配对
Pairing the weight of a protein sequence with the correct sequence
这段代码是一个更大函数的一部分。我已经创建了一个分子量列表,并且还定义了数据中所有片段的列表。
我想弄清楚如何浏览片段列表,计算它们的分子量并检查它是否与另一个列表中的数字匹配。如果匹配,则将序列附加到一个空列表中。
combs = [397.47, 2267.58, 475.63, 647.68]
fragments = ['SKEPFKTRIDKKPCDHNTEPYMSGGNY', 'KMITKARPGCMHQMGEY', 'AINV', 'QIQD', 'YAINVMQCL', 'IEEATHMTPCYELHGLRWV', 'MQCL', 'HMTPCYELHGLRWV', 'DHTAQPCRSWPMDYPLT', 'IEEATHM', 'MVGKMDMLEQYA', 'GWPDII', 'QIQDY', 'TPCYELHGLRWVQIQDYA', 'HGLRWVQIQDYAINV', 'KKKNARKW', 'TPCYELHGLRWV']
frags = []
for c in combs:
for f in fragments:
if c == SeqUtils.molecular_weight(f, 'protein', circular = True):
frags.append(f)
print(frags)
我猜我不完全了解 SeqUtils.molecular_weight 命令在 Python 中的工作原理,但如果有其他方法也很好。
您正在比较浮点值是否相等。那是注定要失败的。在处理浮点值时,您总是必须考虑到某种程度的错误。在这种特殊情况下,您还必须考虑输入值的误差范围。
所以不要像这样比较浮点数
x == y
而是像这样
abs(x - y) < epsilon
其中 epsilon
是一些精心挑选的任意数字。
我对您的代码做了两个细微的修改:我调换了 f
和 c
循环的顺序,以便能够存储 w
的计算值。我还将 w
的值附加到列表 frags
中,以便更好地理解正在发生的事情。
您修改后的代码现在如下所示:
from Bio import SeqUtils
combs = [397.47, 2267.58, 475.63, 647.68]
fragments = ['SKEPFKTRIDKKPCDHNTEPYMSGGNY', 'KMITKARPGCMHQMGEY', 'AINV', 'QIQD', 'YAINVMQCL', 'IEEATHMTPCYELHGLRWV',
'MQCL', 'HMTPCYELHGLRWV', 'DHTAQPCRSWPMDYPLT', 'IEEATHM', 'MVGKMDMLEQYA', 'GWPDII', 'QIQDY',
'TPCYELHGLRWVQIQDYA', 'HGLRWVQIQDYAINV', 'KKKNARKW', 'TPCYELHGLRWV']
frags = []
threshold = 0.5
for f in fragments:
w = SeqUtils.molecular_weight(f, 'protein', circular=True)
for c in combs:
if abs(c - w) < threshold:
frags.append((f, w))
print(frags)
这会打印结果
[('AINV', 397.46909999999997), ('IEEATHMTPCYELHGLRWV', 2267.5843), ('MQCL', 475.6257), ('QIQDY', 647.6766)]
如您所见,权重的第一个值与参考值相差约 0.0009。这就是为什么你没有用你的方法抓住它。
这段代码是一个更大函数的一部分。我已经创建了一个分子量列表,并且还定义了数据中所有片段的列表。 我想弄清楚如何浏览片段列表,计算它们的分子量并检查它是否与另一个列表中的数字匹配。如果匹配,则将序列附加到一个空列表中。
combs = [397.47, 2267.58, 475.63, 647.68]
fragments = ['SKEPFKTRIDKKPCDHNTEPYMSGGNY', 'KMITKARPGCMHQMGEY', 'AINV', 'QIQD', 'YAINVMQCL', 'IEEATHMTPCYELHGLRWV', 'MQCL', 'HMTPCYELHGLRWV', 'DHTAQPCRSWPMDYPLT', 'IEEATHM', 'MVGKMDMLEQYA', 'GWPDII', 'QIQDY', 'TPCYELHGLRWVQIQDYA', 'HGLRWVQIQDYAINV', 'KKKNARKW', 'TPCYELHGLRWV']
frags = []
for c in combs:
for f in fragments:
if c == SeqUtils.molecular_weight(f, 'protein', circular = True):
frags.append(f)
print(frags)
我猜我不完全了解 SeqUtils.molecular_weight 命令在 Python 中的工作原理,但如果有其他方法也很好。
您正在比较浮点值是否相等。那是注定要失败的。在处理浮点值时,您总是必须考虑到某种程度的错误。在这种特殊情况下,您还必须考虑输入值的误差范围。
所以不要像这样比较浮点数
x == y
而是像这样
abs(x - y) < epsilon
其中 epsilon
是一些精心挑选的任意数字。
我对您的代码做了两个细微的修改:我调换了 f
和 c
循环的顺序,以便能够存储 w
的计算值。我还将 w
的值附加到列表 frags
中,以便更好地理解正在发生的事情。
您修改后的代码现在如下所示:
from Bio import SeqUtils
combs = [397.47, 2267.58, 475.63, 647.68]
fragments = ['SKEPFKTRIDKKPCDHNTEPYMSGGNY', 'KMITKARPGCMHQMGEY', 'AINV', 'QIQD', 'YAINVMQCL', 'IEEATHMTPCYELHGLRWV',
'MQCL', 'HMTPCYELHGLRWV', 'DHTAQPCRSWPMDYPLT', 'IEEATHM', 'MVGKMDMLEQYA', 'GWPDII', 'QIQDY',
'TPCYELHGLRWVQIQDYA', 'HGLRWVQIQDYAINV', 'KKKNARKW', 'TPCYELHGLRWV']
frags = []
threshold = 0.5
for f in fragments:
w = SeqUtils.molecular_weight(f, 'protein', circular=True)
for c in combs:
if abs(c - w) < threshold:
frags.append((f, w))
print(frags)
这会打印结果
[('AINV', 397.46909999999997), ('IEEATHMTPCYELHGLRWV', 2267.5843), ('MQCL', 475.6257), ('QIQDY', 647.6766)]
如您所见,权重的第一个值与参考值相差约 0.0009。这就是为什么你没有用你的方法抓住它。