Начиная со списка кортежей, которые содержат координаты x и y точек на графике;Я хотел бы удалить дубликаты точек в списке;однако для моих целей баллы, которые находятся на расстоянии до 10, я считаю дубликатами.
Я написал функцию, которая, кажется, выполняет эту работу, но я держу пари, что есть лучший способ.В приведенных ниже примерах данных: точки 1, 2 и 5 являются дубликатами (на расстоянии 10 друг от друга).Мне все равно, какой из этих трех пунктов пережить процесс исключения.Я ожидаю, что обработаю не более 100 баллов, причем около 50% из них будут устранены.Спасибо!
def is_close(pointA, pointB, closeness):
x1, y1 = pointA
x2, y2 = pointB
distance = int(((x2-x1)**2 + (y2-y1)**2)**0.5) # distance formula
if distance < closeness:
return True
return False
def remove_close_duplicated(data, closeness):
if len(data) < 2: # can't have duplicates if there aren't at least 2 points
return data
new_list_points = []
for i, point in enumerate(data):
if i == 0:
new_list_points.append(point)
continue
close = False
for new_point in new_list_points:
if is_close(new_point, point, closeness):
close = True
break
if close == False:
new_list_points.append(point)
return new_list_points
sample_data =[
(600, 400), # 1
(601, 401), # 2
(725, 300), # 3
(800, 900), # 4
(601, 400), # 5
]
closeness = 10
print(remove_close_duplicated(sample_data, closeness))
'''
output is:
[(600, 400), (725, 300), (800, 900)]
'''