2017-06-07 137 views
0

我有一個排序列表dataPts是基於每個點使得與dataPts最小Y值minY角度來分類,如[(0, 0), (10, 10), (20, 20) ... ](0,0)是minY如何在列表中找到重複項,並刪除除特定項之外的所有重複項?

然後我創建一個新列表angles這是所有這些角度的列表,例如[0, 45, 45, ...]

您會注意到angles包含重複值,例如45, 45,。我想要做的是找到共享相同角度的dataPts中的點。然後我想刪除這些點,除了使用返回值的函數距離minY最遠的點。

例如,(10, 10)(20, 20)都在angles中有相應的值,即45。我怎樣才能挑出更大的距離minY這是(20, 20)和刪除(10, 10)

回答

1

試試這個

angles1 = [(0, 0), (10, 10), (20, 20)] 
angles = [0, 45, 45] 
dumy = {} 
duplicates = [] 
for i,items in enumerate(angles): 
    if (items not in dumy): 
     dumy[items] = "" 
    else: 
     duplicates.append(i) 
     if((angles[i-1] == items) and i-1 not in duplicates): 
      duplicates.append(i-1) 


for i in (duplicates): 
    del angles1[i] 

假設,如果你想刪除的只是重複的,試試下面的代碼

for i,items in enumerate(angles): 
    if (items not in dumy): 
    dumy[items] = "" 
    else: 
    duplicates.append(i) 
    del angles1[i] 
    if((angles[i-1] == items) and i-1 not in duplicates): 
     del angles1[i-1]   
+0

即重複值真是太感謝您回來!使用'duplicateates',我怎樣才能通過'angles1'並刪除可以在'duplicates'中找到的點? –

+0

@RichardHan編輯。 – mkHun

1

,你可以創建一個使用角度作爲鍵,其中的值是所有的字典具有給定角度的元素,然後根據距離函數選擇最大值。

即是這樣的:

d = defaultdict(lambda: []) 

for angle, pt in zip(angles, dataPts): 
    d[angle].append(pt) 

result = [max(pt, key=my_dist_func) for angle, pt in d.items()] 

鑑於您所描述的YMIN和距離的功能,我想這樣的作品:

from collections import defaultdict 

dataPts = [(0, 0), (10, 10), (20, 20) ] 
angles = [0,45,45] 
ymin = min((p[1] for p in dataPts)) 

d = defaultdict(lambda: []) 

for angle, pt in zip(angles, dataPts): 
    d[angle].append(pt) 

result = [max(pt, key=lambda p: p[1]-ymin) for angle, pt in d.items()]