Как удалить список из списка списков на основе условия? - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь удалить список из списка списков на основе условия.Например, 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))

Может кто-нибудь предложить лучший способ справиться с таким повторным удалением точек?

1 Ответ

0 голосов
/ 02 февраля 2019

Вот блок кода, который выполняет то, что вы запросили, однако вам может потребоваться настроить точку точности в соответствии с вашими потребностями

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)}

...