這肯定是重復(fù)的,但是說我有一個如下的類:class MyObj(object): def __init__(self, *args, **kwargs): self._data = [2, 1, 3] self._more_data = [False, True, False]如何使它可排序,而不是針對其他MyObj對象(我可以對它進(jìn)行排序__lt__),而是在內(nèi)部進(jìn)行排序?因此,如果我打電話給sorted(my_obj_instance)我,我得到的數(shù)據(jù)如下:self._data = [1,2,3]self._more_data [True, False, False]即,_data按數(shù)字排序,而_more_data已相應(yīng)排序。
3 回答

慕無忌1623718
TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個贊
sorted()
從不修改原始數(shù)據(jù)。為了使其與自定義對象一起使用,您必須實(shí)現(xiàn)__iter__
(返回例如iter(self._data)
)-但這只會為您提供該對象的排序版本,并且既不會修改原始對象,也不會對兩個列表都進(jìn)行排序。
您想要的是一種sort()
稱為的方法yourobj.sort()
。然后,此方法將.sort()
使用key
您希望它們排序的方式的適當(dāng)參數(shù)調(diào)用列表。

揚(yáng)帆大魚
TA貢獻(xiàn)1799條經(jīng)驗(yàn) 獲得超9個贊
您不能使sorted
return類的實(shí)例。 sorted
總是返回一個列表。如果將其設(shè)為迭代器,則可以sorted
返回類數(shù)據(jù)的排序版本(作為列表)。但是,僅給您的類一個sort
對數(shù)據(jù)進(jìn)行排序的方法可能會更簡單。
添加回答
舉報
0/150
提交
取消