Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 向量排序列表_Python_List_Sorting - Fatal编程技术网

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解决方案:)