Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python用户定义排序_Python_List_Sorting_Oop - Fatal编程技术网

Python用户定义排序

Python用户定义排序,python,list,sorting,oop,Python,List,Sorting,Oop,我正在尝试实现一个用户定义的排序函数,类似于pythonList sort,例如在List.sort(cmp=None,key=None,reverse=False)中 这是到目前为止我的代码 from operator import itemgetter class Sort: def __init__(self, sList, key = itemgetter(0), reverse = False): self._sList = sList se

我正在尝试实现一个用户定义的排序函数,类似于pythonList sort,例如在List.sort(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
从操作员导入itemgetter
类别分类:
定义初始化(self,sList,key=itemgetter(0),reverse=False):
self.\u sList=sList
self.\u key=key
自反
self.sort()
def分拣(自我):
对于范围内的index1(透镜(自身列表)-1):
对于范围内的index2(index1,len(self.\u sList)):
如果self.\u reverse==真:
如果self.\u sList[index1]self.\u sList[index2]:
self.[index1],self.[index2]=self.[index2],self.[index1]
列表=[[1,2],[3,5],[5,1]]
排序(列表,反向=真)
打印列表
当涉及到参数时,我的情况非常糟糕

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


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

键是一个函数,用于将项目转换为用于比较的标准

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

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

lambda x : int(x)
所以字符串是按数字排序的

在您的算法中,必须替换

self._sList[index1] < self._sList[index2]
self.\u sList[index1]

self.\u键(self.\u sList[index1])
因此,将比较从项目计算的值,而不是项目本身

注意,Python3放弃了
cmp
方法,只保留了
key
方法


另外请注意,在您的情况下,使用
itemgetter(0)
作为键函数可用于订阅项,例如
list
(仅按第一项排序)或
str
(仅按第一个字符排序)。

欢迎使用。如果您愿意,请接受以下答案:
self._key(self._sList[index1]) < self._key(self._sList[index2])