Python 二维列表:相对于其他已排序的二维列表对二维列表进行排序

Python 2D lists: sort 2D list in relation to other sorted 2D list

我正在尝试对两个二维列表和两个列表进行排序,每个列表都与其中一个二维列表相关。

这两个 2D 列表是从 2D 和 3D 中捕获的坐标列表,看起来像这样:

2D_list1 = [[0.1, 0.7], [0.2, 0.2], [0.5, 0.2], [0.5, 0.6], [0.7, 0.2], [0.8, 0.7]]
2D_list2 = [[0.5, 0.7], [0.5, 0.1], [0.2, 0.7], [0.8, 0.2], [0.8, 0.7], [0.2, 0.2]]

我的第一种方法是按坐标对列表及其相关列表进行排序,代码如下:

2D_list1, relative_list1 = (list(t) for t in zip(*sorted(zip(2D_list1, relative_list1), key=lambda k: [k[0][0], k[0][1]])))

但因为在 2D 和 3D 中捕获的坐标并不完全相同,即它们在 x 轴和 y 轴上可能相差十分之一。这有时会导致一个列表的排序顺序与另一个列表不同。

我现在的想法是,也许有一种方法可以根据坐标与 x,y 排序的第一个列表的相似程度对第二个二维列表及其相关列表进行排序,但我对如何排序一无所知到处做这个。

示例值的预期输出为:

2D_list1 = [[0.1, 0.7], [0.2, 0.2], [0.5, 0.2], [0.5, 0.6], [0.7, 0.2], [0.8, 0.7]]
2D_list2 = [[0.2, 0.7], [0.2, 0.2], [0.5, 0.1], [0.5, 0.7], [0.8, 0.2], [0.8, 0.7]]

任何有关如何解决此问题的帮助将不胜感激。

编辑:修复了结果格式

相对列表排序错误:

relative_list2.sort(key=lambda x: sorted_list2.index(list2[relative_list2.index(x)]))
ValueError: array([[[37, 40, 40],
    [36, 39, 39],
    [36, 39, 39],
    
    [71, 74, 75],
    [71, 74, 75],
    [70, 73, 74]]], dtype=uint8) is not in list

类型错误

relative_list2.sort(key=lambda x: sorted_list2.index(list2[x]))
TypeError: only integer scalar arrays can be converted to a scalar index

此致 马丁

Python变量名不能以数字开头,所以我将列表命名为list1和list2。 您需要一个函数来检查两个坐标对的相似程度。 一个简单的函数就是取两个x值和两个y值之差的绝对值之和,所以如果两个坐标对是(x1, y1)和(x2, y2)那么函数应该输出abs( x1-x2)+绝对值(y1-y2) 此函数给出两个坐标对之间的差异,因此您需要具有最小 - min() - 差异的对 python min() 函数接受一个名为 key 的参数,我们可以在其中输入此函数。所以有效的代码是:

list1 = [[0.1, 0.7], [0.2, 0.2], [0.5, 0.2], [0.5, 0.6], [0.7, 0.2], [0.8, 0.7]]
list2 = [[0.5, 0.7], [0.5, 0.1], [0.2, 0.7], [0.8, 0.2], [0.8, 0.7], [0.2, 0.2]]
#relative_list2 = list with same len() as list2

sorted_list2 = []
sorted_relative_list2 = []
for coords in list1:
    match = min(list2, key=lambda n: abs(n[0]-coords[0])+abs(n[1]-coords[1]))
    sorted_list2.append(match)
    sorted_relative_list2.append(relative_list2[list2.index(match)])

print(list1)
print(sorted_list2)
print(sorted_relative_list2)

这样输出你想要的(排序后的list_2在变量sorted_list2中)