在 Python 列表中,有两种执行列表排序的替代方法:
- 使用其
.sort
方法,就地排序 - 使用
sorted()
内置函数,该函数返回一个新的排序列表
现在,如果我创建一个自定义容器类型(例如通过从 itertools
的 ABC 进行子类化),我可以做同样的事情吗?
我可以弄清楚如何使自定义容器对象就位排序。但我想要的是内置 sort()
在使用时返回该自定义容器对象的新实例(而不是列表)。
这可能吗?如果是这样,怎么办?
最佳答案
仅子类化内置 list
并重新定义 sort
方法怎么样?
>>> class MyList(list):
def sort(self):
copy = list(self)
copy.sort()
return MyList(copy)
>>> l2 = MyList([2, 6, 9, 8])
>>> l2
[2, 6, 9, 8]
>>> l3 = l2.sort()
>>> l2
[2, 6, 9, 8]
>>> l3
[2, 6, 8, 9]
>>>
编辑:在OP的评论之后,按原样保留sort
方法并添加一个新方法:
>>> class MyList(list):
def sort_copy(self):
copy = list(self)
copy.sort()
return MyList(copy)
从父级继承的 sort
方法保持原样(就地),新的 sort_copy
方法创建一个新方法。
关于python - 对自定义容器对象进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10927678/