排序坐标并保持最低值

问题描述 投票:-1回答:3

对于下面的数组,我有兴趣根据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)]

我可以在这尝试什么?

python arrays sorting matrix coordinates
3个回答
6
投票

鉴于:

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)]

1
投票

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

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)

1
投票

给定的二维数组是:

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中,然后打印。如果算法的逻辑有变化,请告诉我。

© www.soinside.com 2019 - 2024. All rights reserved.