【问题标题】:Sorting the list of objects in Python is failing [duplicate]在 Python 中对对象列表进行排序失败 [重复]
【发布时间】:2019-12-09 17:27:00
【问题描述】:

我创建了名为 points 的类。其中有 2 个“开始”和“结束”(它基本上代表一个 2D 坐标)。在驱动程序中,我制作了一个对象列表,我接受的值很少,我想根据对象对列表进行排序到 'end' 属性。

这是代码:-

class points:
    def __init__(self,a,b):
        self.begin=a
        self.end=b

t=int(input())
while t:
    t-=1
    l=[]
    index=[]
    n=int(input())

    for i in range(n):
        a,b=input().split()
        l.append(points(a,b))

    l=sorted(l, key=lambda obj: obj.end)


    for i in range(n):
        print(l[i].begin,l[i].end)

对于输入:

1
3
5 8
9 12
6 11

这应该是答案:

5 8
6 11
9 12

但它给出了答案:

6 11
9 12
5 8

请帮我解决这个问题。

【问题讨论】:

  • l.append(points(int(a),int(b)))
  • 您目前正在按字典顺序排序,因为 ab 输入是字符串而不是整数

标签: python class sorting object


【解决方案1】:

a,b=input().split() 上面这行返回两个“字符串”而不是“整数”。因此,正在使用基于文本的比较。 (文本比较中11小于8)

在将 a 和 b 传递给 points 类之前将其转换为整数,或者在 points 类的 init 内将其转换为 int。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-26
    • 2015-11-14
    • 2018-07-21
    • 2019-02-24
    • 1970-01-01
    • 2010-10-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多