from math import sqrt
def distance_euclidienne(a, b):
"""
a -- tuple, les composantes sont des nombres
b -- tuple, même longueur que a, les composantes sont des nombres
renvoie la distance euclidienne entre a et b.
"""
assert len(a) == len(b), "Attention, a et b doivent être de même longueur."
somme_des_carrés = sum([(a[i]-b[i])**2 for i in range(len(a))])
return sqrt(somme_des_carrés)
def distance_Manhattan(a, b):
"""
a -- tuple, les composantes sont des nombres
b -- tuple, même longueur que a, les composantes sont des nombres
renvoie la distance Manhattan entre a et b.
"""
assert len(a) == len(b), "Attention, a et b doivent être de même longueur."
somme = sum([abs(a[i]-b[i]) for i in range(len(a))])
return somme
def distances_et_indices(liste_tuples, a, distance):
"""
liste_tuples -- liste de tuples, les composantes sont des nombres
a -- tuple de même longueur et composantes de même nature que ceux de la liste
distance -- fonction calculant la distance entre deux tuples
renvoie la liste
[(distance(a, liste_tuples[0]),0) , (distance(a, liste_tuples[1]), 1), ...]
"""
# la liste des distances
L = [distance(a, element) for element in liste_tuples]
# la liste des couples (distance, indice):
M = [(L[i], i) for i in range(len(L))]
return M
points = [(12, 1, 3), (0,2,0), (1,2,3), (3,1,1), (5,8,9)]
distances_et_indices(points, (0, 0, 0), distance_Manhattan)