[英]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) ]
但由於您未提供任何輸入/輸出示例,因此我無法真正進行測試。
您是否熟悉稱為“集合”的結構?
集是無序唯一元素的集合。 我相信這種結構將為您節省很多開銷,並且根據您的描述會更合適。
您可以使用這樣的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.