Python 在一个列表中查找与另一个列表中的x,y位置最近的x,y位置?

Python 在一个列表中查找与另一个列表中的x,y位置最近的x,y位置?,python,python-2.7,scipy,Python,Python 2.7,Scipy,所以我有两个二维列表,有x和y坐标,我想浏览一下列表1,在列表2中找到每个点最近的x,y坐标。它们的长度不同,如果我不使用列表2中的所有点,或者即使我重复使用点,也没关系,只要我只在列表1中遍历所有点一次。我需要移动本身以及在这两点列表中的位置。我尝试使用我在该网站上找到的功能,但似乎不起作用: def do_kdtree(combined_x_y_arrays,points): mytree = scipy.spatial.cKDTree(combined_x_y_arrays)

所以我有两个二维列表,有x和y坐标,我想浏览一下列表1,在列表2中找到每个点最近的x,y坐标。它们的长度不同,如果我不使用列表2中的所有点,或者即使我重复使用点,也没关系,只要我只在列表1中遍历所有点一次。我需要移动本身以及在这两点列表中的位置。我尝试使用我在该网站上找到的功能,但似乎不起作用:

def do_kdtree(combined_x_y_arrays,points):
    mytree = scipy.spatial.cKDTree(combined_x_y_arrays)
    dist, indexes = mytree.query(points)
    return dist,indexes

#Perhaps it's not doing what I wanted it to do. Here is what I tried:

s_x = ([1.0,2.0,3.0])
s_y = ([1.5,2.5,3.5])
SDSS_x = ([3.0,4.0,5.0])
SDSS_y = ([3.5,4.5,5.5])

list1 = zip([s_x],[s_y])
list2 = zip([SDSS_x],[SDSS_y])


shift,place_in_array = do_kdtree(list1,list2)
我得到的错误是:

Traceback (most recent call last):
  File "tester.py", line 23, in <module>
    shift,place_in_array = do_kdtree(list1,list2)
  File "tester.py", line 9, in do_kdtree
    mytree = scipy.spatial.cKDTree(combined_x_y_arrays)
  File "ckdtree.pyx", line 811, in scipy.spatial.ckdtree.cKDTree.__init__ (scipy/spatial/ckdtree.c:7157)
ValueError: too many values to unpack (expected 2)
回溯(最近一次呼叫最后一次):
文件“tester.py”,第23行,在
shift,place_in_array=do_kdtree(列表1,列表2)
do_kdtree中第9行的文件“tester.py”
mytree=scipy.spatial.cKDTree(组合数组)
文件“ckdtree.pyx”,第811行,位于scipy.spatial.ckdtree.ckdtree.\uuuu init\uuuu(scipy/spatial/ckdtree.c:7157)中
ValueError:要解压缩的值太多(应为2个)

我得到的印象是,这意味着该函数不需要二维列表,这意味着该函数没有真正做到我希望它做的事情。我甚至不确定什么“索引”正在返回,以及它是否真的是列表中的点,这正是我所希望的。如果是这样的话,有人能告诉我,我是否可以使用现有的函数来执行此操作吗?

您错误地使用了
zip
,因为它不会为您创建二维列表:

 >>> s_x = ([1.0,2.0,3.0])
 >>> s_y = ([1.5,2.5,3.5])

 >>> list1_broken = zip([s_x],[s_y])
 >>> print list1_broken
 [([1.0, 2.0, 3.0], [1.5, 2.5, 3.5])]

 >>> list1 = zip(s_x,s_y)
 >>> print list1
 [(1.0, 1.5), (2.0, 2.5), (3.0, 3.5)]

只是一个想法-距离公式计算两点之间的距离。如果需要具有最近距离的集合。计算集合之间的距离。这是一个幼稚的解决方案,但却是一个良好的开端