猿问

如何使类数据可排序

这肯定是重复的,但是说我有一个如下的类:


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已相应排序。


跃然一笑
浏览 165回答 3
3回答

慕无忌1623718

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

扬帆大鱼

您不能使sortedreturn类的实例。 sorted总是返回一个列表。如果将其设为迭代器,则可以sorted返回类数据的排序版本(作为列表)。但是,仅给您的类一个sort对数据进行排序的方法可能会更简单。
随时随地看视频慕课网APP

相关分类

Python
我要回答