我有一个大小为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方式吗? 谢谢你的帮助。
答案 0 :(得分:0)
如果我理解正确,你可以做到
out=[ a for a,b in zip(data,data[1:]) if not np.isclose(a,b) ]
但我无法对此进行测试,因为您没有提供任何输入/输出示例。
答案 1 :(得分:0)
您是否熟悉名为&#34; Set&#34;?
的结构集合是无序唯一元素的集合。我相信这种结构可以为您节省大量开销,并且可以根据您的描述更好地适应。
答案 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