【发布时间】:2021-03-18 18:12:50
【问题描述】:
我有两个列表
list_of_floats = [list of floats]
list_of_stuff = [list of custom class objects]
其中custom class objects 是任意类。这两个列表的长度相同,我想根据list_of_floats 对list_of_stuff 进行排序。所以我在 Python 中照常进行
sorted_stuff = [x for _,x in sorted(zip(list_of_floats,list_of_stuff))]
根据list_of_stuff 的内容,有时这可行,有时这会引发TypeError: '<' not supported between instances of 'stuff' and 'stuff'。当我说“取决于内容”时,我改变的是实例的“值”,而不是 list_of_stuff 中的对象类型。
我不明白它为什么要尝试比较任意类的两个对象,因为它是根据list_of_floats 中的对象(浮点数)进行排序的。事实上list_of_stuff 可以填充不同类的对象...
我尝试使用简单的代码重现我的错误,但无法重现。我的list_of_stuff 中的对象非常复杂。但是我认为list_of_stuff的内容应该与这个问题无关。
【问题讨论】:
-
两个例子都使用了数字。他们都没有使用
InvertersSequence -
我相信你可以做一个更简洁的例子来给出同样的错误。如果人们不必破译大量不相关的代码,你更有可能得到好的答案。见stackoverflow.com/help/how-to-ask
-
查看如何创建minimal reproducible example。我敢打赌,你只需要 5-10 行代码就可以产生同样的错误。
-
如果两个浮点数相等,Python 将查看元组的第二个元素(自定义类对象)以打破平局。要么在自定义类上实现
.__lt__()(使对象具有可比性),要么使用zip(list_of_floats, range(len(list_of_floats), list_of_stuff)保证所有元组都是唯一的,而无需比较自定义对象。