我很困惑为什么两个不同的代码应该做同样的事情(至少当我在脑海中运行它时)。我有三个值列表,名为snr
,m1_inj
和m2_inj
,我试图从每个列表中删除所有非唯一值。
我无法使用numpy uniqueify
或其他任何内容,因为这会改变值的顺序,这是我无法做到的,因为每个值都是list与其他列表中相同位置的值相关联。请注意,这些值是对大约7位有效数字的数值估计,因此最终列表中的两个数字相同的概率可以忽略不计。以下是我尝试过的两种方式:
方法#1:
snr = [snr[i] for i in xrange(len(snr)) if snr[i] not in snr[:i]]
m1_inj = [m1_inj[i] for i in xrange(len(m1_inj)) if m1_inj[i] not in m1_inj[:i]]
m2_inj = [m2_inj[i] for i in xrange(len(m2_inj)) if m2_inj[i] not in m2_inj[:i]]
方法#2:
for i in xrange(len(m1_inj)-1):
if m1_inj[i+1] != m1_inj[i]:
new_m1.append(m1_inj[i+1])
for i in xrange(len(m2_inj)-1):
if m2_inj[i+1] != m2_inj[i]:
new_m2.append(m2_inj[i+1])
for i in xrange(len(snr)-1):
if snr[i+1] != snr[i]:
new_snr.append(snr[i+1])
几乎每一次,第一种方法都能正常工作,但是在蓝色月亮中,其中一个列表的项目太少了。这些列表都具有相同数量的唯一值。但是,我将代码更改为第二种方法,它解决了我的问题。任何人都可以想到这可能是什么原因吗?如果我需要提供更多信息,请与我们联系。