2017-06-07 95 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()]