从包含浮点数的元组列表中删除重复项

时间:2015-03-25 16:19:35

标签: python numpy

我有一个大小为2元组的列表,其中包含浮动元素。一些浮标几乎相等,并且足够接近被认为是相等的。 numpy isclose()可以在这里使用效果很好。我需要删除列表中的重复项,同时始终保留第一个值。

import numpy as np
data=zip(C1,C2)
comparray=[]
eval1=np.isclose(data[0],data[1])
comparray.append(eval1[0])
i=0
while i<(len(data)-1):
    eval=np.isclose(data[i],data[i+1])
    print eval
    comparray.append(eval[0])        
    i+=1
l1=[a for a,b in zip(data,comparray) if not b]

我有这个代码可以满足我的需求,但看起来真的很差。有更多的pythonic方式吗? 谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

如果我理解正确,你可以做到

out=[ a for a,b in zip(data,data[1:]) if not np.isclose(a,b) ]

但我无法对此进行测试,因为您没有提供任何输入/输出示例。

答案 1 :(得分:0)

您是否熟悉名为&#34; Set&#34;?

的结构

集合是无序唯一元素的集合。我相信这种结构可以为您节省大量开销,并且可以根据您的描述更好地适应。

https://docs.python.org/2/library/sets.html

答案 2 :(得分:0)

您可以使用function这样的

def nearly_equal(a,b,sig_fig=2):
    return ( a==b or 
             int(a*10**sig_fig) == int(b*10**sig_fig)
           )

>>>print nearly_equal(3.456,3.457)
True