Python 向量排序列表
假设您有一个向量列表-例如:Python 向量排序列表,python,list,sorting,Python,List,Sorting,假设您有一个向量列表-例如: myListOfVectors=[(10,2),(0,5),(3,2),(8,2),(9,5),(10,5] 将这些向量从小到大排序的最快方法是什么(假设与原点的最小距离是列表的第一个成员,第二个最小距离是第二个成员等等)?假设您谈论的是与原点的欧几里德距离,我会这样做: from math import sqrt def euclidean_distance(v): return sqrt(sum(x**2 for x in v)) myListOf
myListOfVectors=[(10,2),(0,5),(3,2),(8,2),(9,5),(10,5]
将这些向量从小到大排序的最快方法是什么(假设与原点的最小距离是列表的第一个成员,第二个最小距离是第二个成员等等)?假设您谈论的是与原点的欧几里德距离,我会这样做:
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维向量集。假设您讨论的是距离原点的欧几里德距离,下面是我要做的:
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)
def sqdist(vector)
return sum(x*x for x in vector)
myListOfVectors.sort(key=sqdist)
返回
[(3, 2), (0, 5), (8, 2), (10, 2), (9, 5), (10, 5)]
这适用于任何n维向量集
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)]
我使用的是平方距离,因为你实际上在任何地方都不使用距离,而计算平方根是非常昂贵的
结果:
>>> myListOfVectors
[(3, 2), (0, 5), (8, 2), (10, 2), (9, 5), (10, 5)]
我使用的是平方距离,因为实际上在任何地方都不使用距离,计算平方根的成本非常高。这是我正在寻找的pythonic解决方案:)这是我正在寻找的pythonic解决方案:)