我有一个来自pymzml包的pymzml.run.Reader类。这是一个生成器对象,循环遍历它时会产生Spectrum类的实例(也来自pymzml包)。我正在将不同的实例进行比较。由于pymzml.run.Reader是一个生成器对象,在循环遍历之后它们就不能再使用了,因此我将它们保存在列表中以便以后进行比较。
然而,当我将它们保存在列表中,然后循环遍历该列表并打印出光谱的ID时,它只显示了最后一个光谱。为了澄清这一点:
然而,当我将它们保存在列表中,然后循环遍历该列表并打印出光谱的ID时,它只显示了最后一个光谱。为了澄清这一点:
import pymzml
def test(msrun):
for spectrum in msrun:
print spectrum['id']
spectrumList.append(spectrum)
print '-'*20
for i in spectrumList:
print i['id']
msrun = pymzml.run.Reader(r'JG_Ti02-C1-1_C2-01A_file1.aligned.mzML')
提供:
1
2
3
4
5
--------------------
5
5
5
5
5
pymzml有一个deRef()函数,可以创建光谱的深度拷贝,因此以下代码可以正确执行:
import pymzml
def test(msrun):
for spectrum in msrun:
print spectrum['id']
spectrumList.append(spectrum.deRef())
msrun = pymzml.run.Reader(r'JG_Ti02-C1-1_C2-01A_file1.aligned.mzML')
然而,制作深拷贝是我试图从我的应用程序中摆脱的主要瓶颈。我如何将频谱实例附加到列表中,使得不仅最后一个频谱被多次附加?