Python用户定义的排序

时间:2016-12-25 11:52:27

标签: python list sorting oop

我正在尝试实现用户定义的排序函数,类似于 list.sort中的python 列表排序(cmp = None,key = None,reverse = False)例如。

到目前为止,这是我的代码

from operator import itemgetter

class Sort:
    def __init__(self, sList, key = itemgetter(0), reverse = False):

        self._sList = sList
        self._key = key
        self._reverse = reverse 
        self.sort()

    def sort(self):

        for index1 in range(len(self._sList) - 1):
            for index2 in range(index1, len(self._sList)):

                if self._reverse == True:

                    if self._sList[index1] < self._sList[index2]:
                        self._sList[index1], self._sList[index2] =  self._sList[index2], self._sList[index1]

                else: 

                    if self._sList[index1] > self._sList[index2]:
                        self._sList[index1], self._sList[index2] =  self._sList[index2], self._sList[index1]


List = [[1 ,2],[3, 5],[5, 1]]
Sort(List, reverse = True)
print List

对于参数,我的时间非常糟糕。

更具体地说,我想知道是否有一种方法可以使用可选索引对列表进行编码(类似于 foo(* parameters))。

我真的希望你理解我的问题。

1 个答案:

答案 0 :(得分:3)

key是将项目转换为用于比较的标准的函数。

以item作为唯一参数调用,它返回您选择的可比值。

存储为字符串的整数的一个经典关键示例是:

lambda x : int(x)

所以字符串按数字排序。

在您的算法中,您必须替换

self._sList[index1] < self._sList[index2]

通过

self._key(self._sList[index1]) < self._key(self._sList[index2])

所以比较从项目计算的值,而不是项目本身。

请注意,Python 3删除了cmp方法,并保留了key方法。

另请注意,在您的情况下,使用itemgetter(0)作为关键功能适用于可订阅的项目,例如list(仅按第一项排序)或{{1} (仅按第一个字符排序)。