Python用户定义排序
我正在尝试实现一个用户定义的排序函数,类似于pythonList sort,例如在List.sort(cmp=None,key=None,reverse=False)中 这是到目前为止我的代码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
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])