2

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

  1. 使用它的.sort方法,它就地排序
  2. 使用sorted()内置函数,它返回一个新的排序列表

现在,如果我创建一个自定义容器类型(比如通过从itertoolsABC 继承),我可以这样做吗?

我可以弄清楚如何使自定义容器对象就地排序。但我想要的是内置sort()在我使用它时返回该自定义容器对象的新实例(而不是列表)。

这可能吗?如果是这样,怎么做?

4

2 回答 2

1

sorted()不是排序容器(使用您的类型),而是列出:

class YourClass(...):
   ...
   def sort(self):
       new_data = self._data[:]
       ...sort new_data...
       return self.__class__(new_data) # new instance with sorted data
   ...
于 2012-06-07T07:55:28.403 回答
1

只是继承内置函数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)

从 parent 继承的sort方法保持原样(原位),新sort_copy方法创建一个新方法。

于 2012-06-07T08:03:32.990 回答