我正在尝试实现一个用户定义的排序函数,类似于list.sort(cmp = None, key = None, reverse = False)中的python 列表排序强>例如。
这是我到目前为止的代码
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
当涉及到 key 参数时,我的经历非常糟糕。
更具体地说,我想知道是否有一种方法可以使用可选索引编写列表(类似于 foo(*parameters) )。
我真的希望你能理解我的问题。
最佳答案
key
是将项目转换为用于比较的标准的函数。
使用该项目作为唯一参数进行调用,它会返回您选择的可比较值。
将整数存储为字符串的一个经典关键示例是:
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
(按仅第一项)或 str
(仅按第一个字符排序)。
关于Python 用户定义排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41320884/