Вы можете отслеживать, какие точки уже существуют в set
, который вы видели. Для этого вы можете создать класс, который позволяет хэшировать и сравнивать точки:
In [93]: class Point:
...: def __init__(self, x, y):
...: self.x=x
...: self.y=y
...: def __hash__(self):
...: return hash((self.x, self.y))
...: def __eq__(self, other):
...: return self.x == other.x and self.y == other.y
...: def __str__(self):
...: return f'({self.x}, {self.y})'
...: def __repr__(self):
...: return str(self)
...:
In [94]: points = [[49.8, 66.35],
...: [49.79, 66.35],
...: [49.79, 66.35],
...: [44.65, 67.25],
...: [44.65, 67.25],
...: [44.65, 67.25],
...: [44.48, 67.24],
...: [44.63, 67.21],
...: [44.68, 67.2],
...: [49.69, 66.21],
...: [49.85, 66.17],
...: [50.51, 66.04],
...: [49.8, 66.35]]
Теперь мы можем преобразовать точки в массив Point's
In [95]: points = [Point(*p) for p in points]
In [96]: points
Out[96]:
[(49.8, 66.35),
(49.79, 66.35),
(49.79, 66.35),
(44.65, 67.25),
(44.65, 67.25),
(44.65, 67.25),
(44.48, 67.24),
(44.63, 67.21),
(44.68, 67.2),
(49.69, 66.21),
(49.85, 66.17),
(50.51, 66.04),
(49.8, 66.35)]
Все, что нам нужно чтобы сделать это сейчас, просто l oop через точки и добавьте его в список unique
, если мы его еще не видели
In [102]: seen = set()
In [103]: new_points = []
In [104]: for point in points:
...: if point not in seen:
...: new_points.append(point)
...: seen.add(point)
...:
In [105]: new_points
Out[105]:
[(49.8, 66.35),
(49.79, 66.35),
(44.65, 67.25),
(44.48, 67.24),
(44.63, 67.21),
(44.68, 67.2),
(49.69, 66.21),
(49.85, 66.17),
(50.51, 66.04)]
Теперь ваш порядок поддерживается без повторяющихся точек.
РЕДАКТИРОВАТЬ: Я думаю, что я неправильно понял часть вопроса. Я думаю, вы просто хотите игнорировать последовательные наборы? Как и в случае, только повторяя точки сразу после другой точки, но если это в конце, то вы хотите сохранить его. Если это так, вы можете сделать:
In [114]: new_points = [points[0]]
In [115]: repeat = new_points[0]
In [116]: for point in points[1:]:
...: # New point found, i.e. not a repeat from previous sequential set
...: if point != repeat:
...: repeat = point
...: new_points.append(point)
...:
In [117]: new_points
Out[117]:
[(49.8, 66.35),
(49.79, 66.35),
(44.65, 67.25),
(44.48, 67.24),
(44.63, 67.21),
(44.68, 67.2),
(49.69, 66.21),
(49.85, 66.17),
(50.51, 66.04),
(49.8, 66.35)]
А затем преобразовать его для построения графика:
points = np.array([[p.x, p.y] for p in new_points])
plt.plot(points[:,0], points[:,1])