Python 用户定义排序

标签 python list sorting oop

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

相关文章:

python - 从网站上的表中解析数据,其中零条目输入为 "-"

c# - 使用 DataGrid 的 EnumerableCollectionView 到 ListCollectionView

python - 在 Pycharm 上通过 docker-compose 运行 Python 控制台

python - 在执行之前将所有从 python 脚本触发的 shell 命令打印到控制台

python - 根据第三个列表中的随机项目,从两个列表之一中选择一个随机项目

Python:迭代多个列表以获得相同索引的每个项目的中值

SQL:如何以某种任意方式对查询结果进行排序/排序?

algorithm - 对知道邻居的节点进行排序,但不知道他们在哪一边

python - 用 pandas reindex 函数填充缺失的数据行

c# - 从列表访问字典时出现异常