这肯定是重复的,但是说我有一个如下的类:class MyObj(object): def __init__(self, *args, **kwargs): self._data = [2, 1, 3] self._more_data = [False, True, False]如何使它可排序,而不是针对其他MyObj对象(我可以对它进行排序__lt__),而是在内部进行排序?因此,如果我打电话给sorted(my_obj_instance)我,我得到的数据如下:self._data = [1,2,3]self._more_data [True, False, False]即,_data按数字排序,而_more_data已相应排序。
3 回答

慕无忌1623718
TA贡献1744条经验 获得超4个赞
sorted()
从不修改原始数据。为了使其与自定义对象一起使用,您必须实现__iter__
(返回例如iter(self._data)
)-但这只会为您提供该对象的排序版本,并且既不会修改原始对象,也不会对两个列表都进行排序。
您想要的是一种sort()
称为的方法yourobj.sort()
。然后,此方法将.sort()
使用key
您希望它们排序的方式的适当参数调用列表。

扬帆大鱼
TA贡献1799条经验 获得超9个赞
您不能使sorted
return类的实例。 sorted
总是返回一个列表。如果将其设为迭代器,则可以sorted
返回类数据的排序版本(作为列表)。但是,仅给您的类一个sort
对数据进行排序的方法可能会更简单。
添加回答
举报
0/150
提交
取消