Евклидово расстояние между элементами списка

У меня есть список словаря следующим образом:

list = [{a: 3, b: 2}, {a: 7, b: 9}, {a: 9, b: 11}]

Я хочу вычислить евклидово расстояние между каждым элементом списка и каждым другим.

Я не могу узнать, как мне этого добиться. Пожалуйста, предложите мне pythonic способ рассчитать это.

3 ответа

Выберите два элемента одновременно

использовать itertools

import itertools
for pointA, pointB in itertools.combinations(list, 2):
    distance(pointA,pointB)

где расстояние ваша функция, чтобы получить расстояние с помощью точек

Ты можешь использовать itertools.combinations сделать это. Выберите 2 элемента из списка одновременно.

from itertools import combinations
from math import sqrt
for first,second in combinations(lst,2):
    print sqrt((first['a']-second['a'])**2 + (first['b']-second['b'])**2)

Если вы хотите рассчитать расстояние с учетом элемента с самим собой, используйте combinations_with_replacement,

from itertools import combinations_with_replacement
for first,second in combinations_with_replacement(lst,2):
    #same_as_before

Если вы предпочитаете все доступные перестановки, а не комбинации, используйте:

from itertools import permutations
for first,second in permutations(lst,2):
    #same_as_before   

Если вы хотите узнать больше об itertools, читайте здесь

Вы можете сделать что-то вроде этого:

from itertools import combinations
from math import sqrt

def get_euclidean_distance(point1, point2):
    distance = sqrt((point1['a']-point2['a'])**2 + (point1['b']-point2['b'])**2)
    return distance

if __name__ == '__main__':
    my_list =[{'a':3,'b':2},{'a':7,'b':9},{'a':9,'b':11}]
    for point1, point2 in combinations(my_list,2):
            print 'Euclidean distance between', point1, 'and', point2, 'is', get_euclidean_distance(point1, point2)
Другие вопросы по тегам