python - 对自定义容器对象进行排序

标签 python oop list

在 Python 列表中,有两种执行列表排序的替代方法:

  1. 使用其 .sort 方法,就地排序
  2. 使用 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/

相关文章:

python - 使用 python 绘制值图表

c - C : good, 中的继承不好,还是其他?

java - 扩展其他接口(interface)但也包含相同方法的接口(interface)

python - Python 中的混合继承

删除嵌套列表中的重复项

python - 尝试将带有边缘的 txt.file 转换为边缘列表

python - 从 Numba jitted 代码调用 Cython 函数

python - 在 Python 中检查目录是否为空的最快方法是什么

c# - 如何验证类中 List<> 属性中的数据?

c++ - 重载 operator-、operator< 和 operator >