对坐标进行排序并保持最低值



对于下面的数组,我有兴趣根据 y 轴对 X 轴进行排序,并记录最低 X 值的最低元组。

数组为:

A = [(537, 14),
     (537, 12),
     (538, 13),
     (538, 14), # (538, 14) should be removed and (537, 14) should be kept
     (539, 12),
     (709, 9)]

我会这样做:

New_A = [(537, 14),
         (537, 12),
         (538, 13), 
         (539, 12),
         (709, 9)]

我可以在这里尝试什么?

给定:

a = [(537, 14),
     (537, 12),
     (538, 13),
     (538, 14),
     (539, 12),
     (709, 9)]

你可以做:

from itertools import groupby
from operator import itemgetter
f = itemgetter(1)
new_a = [next(group) for _, group in groupby(sorted(a, key=f, reverse=True), key=f)]

这给了:

[(537, 14), 
 (538, 13), # <- I am assuming you have a typo here OP
 (537, 12), 
 (709, 9)]
  • 这是一个链接,以了解有关itertools.groupby的更多信息。
  • 这是另一个operator.itemgetter.

要对列表进行排序,请使用

New_A = sorted(A, key=lambda x: x[0])

一种常见的模式是使用某些对象的索引作为键对复杂对象进行排序。

你问题的第二部分。

根据 X 获得最低值,根据 y 获得最低值,如下所示

lowest = New_A[0]
print(lowest)
(537, 14)
lowest = New_A[-1]
print(lowest)
(709, 9)

给定的二维数组是:

A = [(537, 14),  (537, 12),  (538, 13),  (538, 14),  (539, 12), (709, 9)]

让我们假设A是与(x,y)的关系,作为有序对。因此,xy声明两个变量,并将它们初始化为第一个值,即

x=537 and y=14

因此

x=A[0][0]
y=A[0][1]

还要取两个虚拟变量ij遍历二维数组:以下算法选择最低x值。如果有超过 1 个相等的x值,则选择(x,y),使y最低。

# Here it starts :
j=0
for i in range(1,len(A)):
    for j in range(0,1) :
        if A[i][j]<x :
            x=A[i][0]
            y=A[i][1]
        elif x==A[i][0] and y>A[i][1] :
            y=A[i][1]
ans=(x,y)        
print(ans)

有序对 (x,y( 存储在变量ans中,然后打印。如果算法的逻辑发生变化,请告诉我。

最新更新