我有一个 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.sort
或 sorted
使其可靠地工作。问题是这些函数背后的排序算法不能保证哪些元素被比较或不被比较(它只是说结果将被排序)。要使 list.sort
或 sorted
可靠地工作,您需要 total ordering relation 键
,你的函数没有提供。
此外 key
应该是一个将一个元素转换为“应该比较的属性”的函数,它确实将列表的每个元素传递给 key
函数不是总列表(事实上,在 CPython 中,当您对它进行排序
时,该列表是空的,所以它根本无法工作)。
关于python - 将函数传递给排序函数的键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45103046/