我正在尝试实现用户定义的排序函数,类似于 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))。
我真的希望你理解我的问题。
答案 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} (仅按第一个字符排序)。