Из списка пар (x, y)
вы можете
использовать itertools.permutations
, чтобы получить перестановки внутри этого списка. Вот пример с 3 точками, вы получили 6 перестановок, указав длину 2
values = [(2, 1), (0, 3), (3, 2)]
perm = [((2, 1), (0, 3)), ((2, 1), (3, 2)), ((0, 3), (2, 1)),
((0, 3), (3, 2)), ((3, 2), (2, 1)), ((3, 2), (0, 3))]
, позвоните вашему calculate_distance
с точками
p1 = (1,2)
p2 = (2,3)
dist = calculate_distance(*p1, *p2) #or calculate_distance(p1[0], p1[1], p2[0], p2[1])
Используйте все это
values = create_list(300, 300, 3)
for p1, p2 in permutations(values, r=2):
dist = calculate_distance(*p1, *p2)
print(p1, p2, dist)
Чтобы сложить их все, добавьте значение, чтобы сделать total+=dist
в l oop, или используйте sum
, который принимает итеративный и сократить
values = create_list(300, 300, 3)
total = sum(calculate_distance(*p1, *p2) for p1, p2 in permutations(values, r=2))
Использование циклов
Сумма только последовательных точек
# Way 1 : d(a,b) + d(b,c) + d(c,d) + d(d,e) + d(e,a)
total = calculate_distance(*values[-1], *values[0]) # between last and first
for i in range(len(values) - 1):
total += calculate_distance(*values[i], *values[i + 1])
print(total)
Сумма всех комбинаций точек
# Way 2: d(a,b) + d(a,c) + d(a,d) + d(a,e) + d(b,c) + d(b,d) + d(b,e) + d(c,d) + d(c,e) + d(d,e)
total = 0
for p1 in values:
for p2 in values:
if p1 != p2:
total += calculate_distance(*p1, *p2)
print(total)