Я пытаюсь удалить список из списка списков на основе условия.Например, pnts - это список списков, сформированных с использованием списков, таких как P1, P2, P3, P4 и P5.Эти P1, P2, P3, P4 и P5 представляют местоположение точки в пространстве.Я хотел бы удалить точки, которые очень близки друг к другу, такие как P4 и P5.Поскольку P4 и P5 очень близки к P1 и сохраняют только свое первое вхождение в новый список.Близость каждой точки проверяется с помощью функции "is_equal", приведенной ниже в полном коде.
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]
Полный код показан ниже,
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]
Я попытался с помощью функции itertools groupby, но я не мог получить правоответ, то есть
list(pnts for pnts,_ in itertools.groupby(pnts))
Может кто-нибудь предложить лучший способ справиться с таким повторным удалением точек?