gpt4 book ai didi

Python 用户定义排序

转载 作者:行者123 更新时间:2023-11-30 22:45:00 25 4
gpt4 key购买 nike

我正在尝试实现一个用户定义的排序函数,类似于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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com