在Python中附加For-Loop v.List Comprehension

时间:2014-09-01 15:57:25

标签: python list for-loop list-comprehension

我很困惑为什么两个不同的代码应该做同样的事情(至少当我在脑海中运行它时)。我有三个值列表,名为snrm1_injm2_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])

几乎每一次,第一种方法都能正常工作,但是在蓝色月亮中,其中一个列表的项目太少了。这些列表都具有相同数量的唯一值。但是,我将代码更改为第二种方法,它解决了我的问题。任何人都可以想到这可能是什么原因吗?如果我需要提供更多信息,请与我们联系。

0 个答案:

没有答案