我使用Python对随机星光谱进行求和,以提高它们的信噪比。这些频谱标题中的一个关键字包含频谱的积分时间。当我对光谱求和时,我希望用我使用的每个光谱的积分时间之和来更新所得光谱的关键字。为此,我使用以下代码:
for kk in range(0,NumberOfSpectra): # main cycle
TotalIntegrationTime = 0.0
for item in RandomSpectraList: # secondary cycle
SpectrumHeader = SpectraFullList[item]['head'] #1
TotalIntegrationTime += SpectrumHeader['EXPTIME']
SpectrumHeader['EXPTIME'] = TotalIntegrationTime #2
SaveHeaderFunction(SpectrumHeader, kk)
我遇到的问题是,当主循环循环时,SpectrumHeader
在我在#1中重新分配它时不会被重置,并显示它在#2中的值。关于为什么会发生这种情况以及如何解决它的任何想法?
NumberOfSpectra
由用户提供,RandomSpectraList
是按名称列出的随机光谱。 SpectraFullList
包含光谱,并且键有'head'和'spec'。
答案 0 :(得分:1)
您是否知道第2行中的事实,SpectrumHeader仍然指向SpectraFullList的元素?它们是真正相同的对象。 因此,在执行第2行时,您实际上是在修改SpectraFullList。 我猜这不是你想要的,它可能是你问题的原因。
为了解决这个问题,请在#2之前插入以下行:
SpectrumHeader = SpectraFullList[item]['head'].copy()