排序矢量python列表

时间:2015-05-10 16:19:34

标签: python list sorting

假设你有一个向量列表 - 例如:

myListOfVectors=[(10,2),(0,5),(3,2),(8,2),(9,5),(10,5]

将这些向量从小到大排序的最快方法是什么(假设距离原点的最小距离是列表的第一个成员,第二个最小距离是第二个成员等...)?

2 个答案:

答案 0 :(得分:4)

def sqdist(vector)
    return sum(x*x for x in vector)

myListOfVectors.sort(key=sqdist)

结果:

>>> myListOfVectors
[(3, 2), (0, 5), (8, 2), (10, 2), (9, 5), (10, 5)]

我使用平方距离,因为你实际上并没有在任何地方使用距离,计算平方根的代价非常高。

答案 1 :(得分:1)

假设你在谈论欧几里德距起源的距离,我会做什么:

from math import sqrt

def euclidean_distance(v):
    return sqrt(sum(x**2 for x in v))

myListOfVectors = [(10,2),(0,5),(3,2),(8,2),(9,5),(10,5)]

sorted(myListOfVectors, key=euclidean_distance)

返回

[(3, 2), (0, 5), (8, 2), (10, 2), (9, 5), (10, 5)]

这适用于任何n维向量集。