【问题标题】:Sorting coordinates and keep the lowest value排序坐标并保持最小值
【发布时间】:2018-03-02 09:54:06
【问题描述】:

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

我可以在这里尝试什么?

【问题讨论】:

  • 你能解释一下为什么(537,14)(538,13)?不应该是你提到的最低的(537,12)吗?
  • 抱歉,错字!我为混乱道歉。谢谢指正。

标签: python arrays sorting matrix coordinates


【解决方案1】:

给定:

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

【讨论】:

  • 感谢您将我介绍给 groupby,完美运行 :)
  • 你在输出中重复了537
  • @bro-grammer 我理解(不完全清楚)问题的方式是保持元组x 相同x[1] 具有最低x[0]。 OP说“..它完美地工作”。你有不同的理解吗?
  • 我完全不明白这个问题。我认为New_A 是必需的输出。
  • @bro-grammer 是的,但它与解释如何到达它的文本相矛盾。
【解决方案2】:

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

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)

【讨论】:

    【解决方案3】:

    给定的二维数组是:

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

    【讨论】:

      猜你喜欢
      • 2015-03-14
      • 2012-06-02
      • 2020-10-21
      • 1970-01-01
      • 1970-01-01
      • 2011-09-14
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多