私はpymzmlパッケージからpymzml.run.Readerクラスを持っています。これはジェネレータオブジェクトで、これをループすると、(pymzmlパッケージからの)Spectrumクラスのインスタンスが生成されます。私はお互いに異なるインスタンスを比較しています。 pymzml.run.Readerはジェネレータオブジェクトであるため、それらをループした後は使用できませんので、後で比較するためにリストに保存します。オブジェクトのインスタンスをリストに追加することは、時間のかかるディープコピーでのみ機能しますが、どのように変更できますか?
しかし、それらをリストに保存して、スペクトルの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は、以下が正常に動作しないので、スペクトルのdeepcopyを作る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')
私がアプリケーションから抜け出そうとしている深刻なボトルネックとなっています。どのようにしてスペクトルインスタンスをリストに追加すれば、最後のスペクトルだけでなく、複数回追加することができますか?
はい、そうです、それは同じメモリアドレスです。 Spectrum.deRef()はdeepcopyを使い、いくつかの情報を取り除きます。ちょうどそのような大きな時間がかかります。とにかく、あなたの答えに感謝します。 –