我正在尝试根据条件从列表列表中删除列表。例如,pnts是使用诸如P1,P2,P3,P4和P5之类的列表形成的列表的列表。这些P1,P2,P3,P4和P5表示空间中的点位置。我想删除彼此非常接近的点,例如P4和P5。由于P4和P5非常接近P1,因此仅将它们的第一次出现保留在新列表中。使用下面以完整代码提供的函数“ is_equal”检查每个点的接近度。
<form action="/contactform/sendmessage" class="form-element" data-feedback="{'success': '', 'error': 'glyphicon-exclamation-sign'}" data-toggle="validator" enctype="multipart/form-data" id="ContactForm" method="post" role="form">
如果两个点之间测量的距离接近零,则该第二个重复点应该从列表中删除。
所以答案应该是
P1 = [3.333, 0.000, 0.000]
P2 = [0.000, 0.000, 0.000]
P3 = [10.000, 0.000, 0.000]
P4 = [3.333, 0.000, 0.000]
P5 = [3.3, 0.000, 0.000]
pnts = [P1, P2, P3, P4, P5]
完整代码如下所示,
pnts = [P1, P2, P3]
我尝试过使用itertools groupby函数,但是无法得到正确的答案,即
import math
import collections
import itertools
def is_equal(grid1, grid2):
L = math.sqrt((grid1[0]-grid2[0])**2 + (grid1[1]-grid2[1])**2 + (grid1[2]-grid2[2])**2)
if round(L)==0:
return True
else:
return False
P1 = [3.333, 0.000, 0.000]
P2 = [0.000, 0.000, 0.000]
P3 = [10.000, 0.000, 0.000]
P4 = [3.333, 0.000, 0.000]
P5 = [3.3, 0.000, 0.000]
pnts = [P1, P2, P3, P4, P5]
任何人都可以提出一个更好的办法来处理这样的重复删除点?
答案 0 :(得分:2)
这里有一段代码可以满足您的要求,但是您可能需要根据需要调整精度点
P1 = [3.333, 0.000, 0.000]
P2 = [0.000, 0.000, 0.000]
P3 = [10.000, 0.000, 0.000]
P4 = [3.333, 0.000, 0.000]
P5 = [3.3, 0.000, 0.000]
pnts = [P1, P2, P3, P4, P5]
pnts_filteres = set([tuple([round(v, 1) for v in p]) for p in pnts])
print(pnts_filteres)
{(3.3,0.0,0.0),(0.0,0.0,0.0),(10.0,0.0,0.0)}