python - 将函数传递给排序函数的键

标签 python list python-3.x sorting

我有一个 list

lis = [ [0, 1], [1, -1], [1, 0] ]

我想根据特定条件对其进行排序。我想使用一种逻辑,每当 lis[i][0] 等于 lis[i + 1][0] 时,交换元素。有点像

在上面的列表中,第二个和第三个元素是[1, -1][1, 0],其中lis[i][0 ] == lis[i + 1][0]。所以我将交换它,使我的新列表变成

lis = [ [0, 1], [1, 0], [1, -1] ]

这是我的功能:

def sortList(lis3):
    for i in range(0, len(lis3) - 1):
        for j in range(i + 1, len(lis3)):
            if lis3[i][0] == lis3[j][0]:
                lis3[i], lis3[j] = lis3[j], lis3[i]

我想将此函数传递给列表的 sort 方法,以便它根据此逻辑进行排序:

我试过这样做但不起作用:

lis.sort(key=sortList)

如何让这个函数在 sort 方法中工作?

最佳答案

您无法使用 list.sortsorted 使其可靠地工作。问题是这些函数背后的排序算法不能保证哪些元素被比较或不被比较(它只是说结果将被排序)。要使 list.sortsorted 可靠地工作,您需要 total ordering relation ,你的函数没有提供。

此外 key 应该是一个将一个元素转换为“应该比较的属性”的函数,它确实将列表的每个元素传递给 key 函数不是总列表(事实上,在 CPython 中,当您对它进行排序时,该列表是空的,所以它根本无法工作)。

关于python - 将函数传递给排序函数的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45103046/

相关文章:

python-3.x - 启动 Bigquery 作业的数据流作业间歇性失败,出现错误 "errors": [ { "message": "Already Exists: Job

Python:看看一组是否完全包含另一组?

python - 用于视频分类的 CNN LSTM keras

css - 组合字符串和变量值以访问现有变量

c# - 在自定义类的 IEnumerable 中对具有特定 ID 的项目求和

Python——将字符串转换为列表

python - 将字符串列表转换为具有单独整数的列表时出现错误?

python - 有没有办法获取 numpy 数组(Python)每行的前 k 个值?

python - 使用 ipywidgets FileUpload 小部件时,我可以定义文件上传操作吗

python - 在Python中读取文件时如何更新计数器变量?