【发布时间】:2022-01-06 21:49:45
【问题描述】:
所以我有这个清单:
lst = [[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]]
我想对它进行相应的排序:第一个索引的顺序相反,如果两个项目具有相同的第一个索引,那么按照第二个索引的正常顺序
所以输出将是:
lst = [[7, 0], [7, 1], [6, 1], [5, 0], [5, 2], [4, 4]]
我可以使用 lambda 函数来做到这一点:
lst = [[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]]
lst.sort(key = lambda x : (-x[0], x[1]))
但是如果我不想使用 lambda,我该怎么做呢?我有这个模板,但不知道如何从这里开始:
lst = [[7, 0], [4, 4], [7, 1], [5, 0], [6, 1], [5, 2]]
def compare(input):
# put code here
lst.sort(key = compare(#what and how do I pass as input))
【问题讨论】:
-
返回与您的 lambda 相同的内容:
def compare(x): return (-x[0], x[1]) -
lambda基本上是def的快捷方式,您不必为函数命名。 -
lst.sort(key=compare)是正确的。你没有传递任何输入。你只是在传递函数。sort函数将调用您的函数并传递正确的输入。 -
添加到上面的 cmets 中,在
list.sort中传递函数对象。你不叫它。lst.sort(key=compare)应该写。 -
我强烈建议不要调用你的 key 函数
compare。排序函数通常接受 key 函数或 comparison 函数作为输入。在 python2 中,可以通过传递 comparison 函数进行排序。在 python3 中,这是不可能的,你应该总是传递一个 key 函数;但是有functools.cmp_to_key 将比较函数包装成关键函数。调用您的 key 函数“比较”会让人感到困惑,对您和阅读您的代码的人来说都是如此。
标签: python sorting multidimensional-array lambda