簡體   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