繁体   English   中英

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

[英]Remove duplicates from a list of tuples containing floats

我有一个大小为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]

我有满足我需要的这段代码,但看起来确实很差。 有没有更Python的方式来做到这一点? 谢谢您的帮助。

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

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

但由于您未提供任何输入/输出示例,因此我无法真正进行测试。

您是否熟悉称为“集合”的结构?

集是无序唯一元素的集合。 我相信这种结构将为您节省很多开销,并且根据您的描述会更合适。

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

您可以使用这样的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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM